摘要:為什么需要原型鏈為了實現(xiàn)繼承,具有相同特性的代碼不需要重復(fù)編寫,放在構(gòu)造函數(shù)里面,實例化的對象都會擁有里面的屬性了,也就是可以共享屬性和方法。
一段簡單代碼引入
function Foo() {}; var f1 = new Foo();
1.概念簡單理解
Foo()是構(gòu)造函數(shù),構(gòu)造函數(shù)有一個prototype屬性
Foo.prototype 是f1的原型對象,有一個constructor屬性,指向該原型對象對應(yīng)的構(gòu)造函數(shù),即
Foo.prototype.constructor console.log(Foo.prototype.constructor === Foo);//true console.log(f1._proto_=== Foo.prototype);//true console.log(f1._proto_.constructor=== Foo);//true
f1是Foo的實例對象,自身沒有constructor屬性,但可以繼承原型對象的屬性,即
console.log(f1.constructor === Foo);//true console.log(f1.hasOwnProperty("constructor"));//false
2.結(jié)合demo
原型鏈?zhǔn)菍τ跇?gòu)造函數(shù)而言的,首先定義一個構(gòu)造函數(shù),再實例化生成一個實例對象,可能在實例對象中沒有定義某個屬性,但是在構(gòu)造函數(shù)中有,那么它就會往上(向構(gòu)造函數(shù)中)查找,這個查找的過程就叫做原型鏈。
function Foo(){}; Foo.prototype.name = "ziziyaya"; var foo=new Foo(); console.log(foo.name); //ziziyaya
3.為什么需要原型鏈
為了實現(xiàn)繼承,具有相同特性的代碼不需要重復(fù)編寫,放在構(gòu)造函數(shù)里面,實例化的對象都會擁有里面的屬性了,也就是可以共享屬性和方法。
function Dog() { this.eat = "food"; this.smell = "smart"; } let dog1 = new Dog(); let dog2 = new Dog(); dog1.name = "huang"; dog2.name = "hei"; console.log(dog1.name+","+dog1.eat+","+dog1.smell);//huang,food,smart console.log(dog2.name+","+dog2.eat+","+dog2.smell);//hei,food,smart
推薦文章:http://www.ruanyifeng.com/blo...
4.繼續(xù)往上引申--Foo.prototype的構(gòu)造函數(shù)是Object(),原型對象是Object.prototype
console.log(Foo.prototype.__proto__ === Object.prototype);//true
實例對象Foo.prototype本身具有constructor屬性,所以它會覆蓋繼承自原型對象Object.prototype的constructor屬性
下面是自身沒有constructor屬性,繼承自原型對象的f1和 自身有constructor屬性覆蓋了原型對象的Foo.prototype 截圖對比
再往上引申 如果Object.prototype作為實例對象的話,其原型對象是什么,結(jié)果是null
附加一篇簡潔易懂的原型鏈理解的文章 http://www.cnblogs.com/shuiyi...
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/93031.html
摘要:返回新對象構(gòu)造函數(shù)與其他函數(shù)的唯一區(qū)別,就在于調(diào)用它們的方式不同。在默認(rèn)情況下,所有原型對象都會自動獲得一個構(gòu)造函數(shù)屬性,這個屬性是一個指向?qū)傩运诤瘮?shù)的指針。 對象 1.對象的定義 無序?qū)傩缘募?,其屬性可以包含基本值,對象或者函?shù)。每個屬性都是一個名/值對。屬性名是字符串,因此我們可以把對象看成是從字符串到值的映射。 2.對象的創(chuàng)建 ======= 通過new創(chuàng)建對象 new...
摘要:背景個人背景就讀于東北某普通二本院校計算機軟件工程專業(yè),現(xiàn)大四,北京實習(xí)前端方向,自學(xué),技術(shù)棧時間背景大概是在月日準(zhǔn)備好簡歷開始投遞秋招差不多已經(jīng)結(jié)束招聘崗位不多,投遞對象為大一些的互聯(lián)網(wǎng)公司事件背景第一個入職的是好未來的前端實習(xí)崗,待遇工 背景 個人背景 就讀于東北某普通二本院校計算機軟件工程專業(yè),現(xiàn)大四,北京實習(xí) 前端方向,自學(xué),vue技術(shù)棧 時間背景 大概是在11月9日準(zhǔn)備...
摘要:背景個人背景就讀于東北某普通二本院校計算機軟件工程專業(yè),現(xiàn)大四,北京實習(xí)前端方向,自學(xué),技術(shù)棧時間背景大概是在月日準(zhǔn)備好簡歷開始投遞秋招差不多已經(jīng)結(jié)束招聘崗位不多,投遞對象為大一些的互聯(lián)網(wǎng)公司事件背景第一個入職的是好未來的前端實習(xí)崗,待遇工 背景 個人背景 就讀于東北某普通二本院校計算機軟件工程專業(yè),現(xiàn)大四,北京實習(xí) 前端方向,自學(xué),vue技術(shù)棧 時間背景 大概是在11月9日準(zhǔn)備...
摘要:的面向?qū)ο笾饕藘蓧K創(chuàng)建對象繼承。構(gòu)造函數(shù)一般來說,我們可以這樣定義構(gòu)造函數(shù)構(gòu)造函數(shù)的函數(shù)名常大寫在這里,我們沒有顯示的創(chuàng)建對象,沒有語句,卻將屬性和方法賦值給了。 面向?qū)ο笫擒浖_發(fā)方法。面向?qū)ο蟮母拍詈蛻?yīng)用已超越了程序設(shè)計和軟件開發(fā),擴展到如數(shù)據(jù)庫系統(tǒng)、交互式界面、應(yīng)用結(jié)構(gòu)、應(yīng)用平臺、分布式系統(tǒng)、網(wǎng)絡(luò)管理結(jié)構(gòu)、CAD技術(shù)、人工智能等領(lǐng)域。面向?qū)ο笫且环N對現(xiàn)實世界理解和抽象的方法...
摘要:在創(chuàng)建子類實例時,不能向超類型的構(gòu)造函數(shù)中傳遞參數(shù)。構(gòu)造函數(shù)繼承子類傳進的值是基本思想是在子類構(gòu)造函數(shù)的內(nèi)部調(diào)用超類或父類型構(gòu)造函數(shù)。繼承保證構(gòu)造函數(shù)指針指向如果想同時繼承多個,還可使用添加屬性的方式類繼承, OOP:Object Oriented Programming 面向?qū)ο缶幊獭?題外話:面向?qū)ο蟮姆秶鷮嵲谔螅劝堰@些大的東西理解理解。 1.什么是對象? 根據(jù)高程和權(quán)威指南上...
閱讀 2306·2021-11-23 09:51
閱讀 3782·2021-10-20 13:49
閱讀 1779·2021-09-06 15:13
閱讀 1882·2021-09-06 15:02
閱讀 3356·2021-09-02 15:11
閱讀 962·2019-08-29 15:37
閱讀 1801·2019-08-29 13:24
閱讀 2323·2019-08-29 11:28