成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

__proto__和prototype

raise_yang / 3313人閱讀

摘要:屬性對(duì)性能影響非常嚴(yán)重,不建議使用。當(dāng)你創(chuàng)建函數(shù)時(shí),會(huì)為這個(gè)函數(shù)自動(dòng)添加屬性。構(gòu)造函數(shù)原型的默認(rèn)指向自身。所有對(duì)象均從繼承屬性。結(jié)果見下圖普通對(duì)象是構(gòu)造函數(shù)的實(shí)例,所以普通對(duì)象的原型是。總結(jié)和其它函數(shù)由產(chǎn)生,的是他自己。

_proto_

每個(gè)對(duì)象都有一個(gè)__proto__(前后各兩個(gè)下劃線)屬性來標(biāo)識(shí)自己所繼承的原型對(duì)象。__proto__屬性對(duì)性能影響非常嚴(yán)重,不建議使用。

prototype

只有函數(shù)才有prototype屬性。當(dāng)你創(chuàng)建函數(shù)時(shí),JS會(huì)為這個(gè)函數(shù)自動(dòng)添加prototype屬性。構(gòu)造函數(shù)原型的constructor默認(rèn)指向自身。

function Person(){
   this.name="aaa";
}
Person===Person.prototype.constructor // true
console.log(Person.prototype);// 結(jié)果見下圖

Object和Function

每個(gè)內(nèi)置對(duì)象都是一個(gè)native object。一個(gè)內(nèi)置的對(duì)象同時(shí)也是一個(gè)構(gòu)造函數(shù)。function是一種對(duì)象類型。

Function

function是內(nèi)置Function的實(shí)例,即普通函數(shù)是Function的實(shí)例。因此普通函數(shù)的constructor是Function。Function的constructor還是他自己。

function Person(){var a=1;}
Person.constructor    //function Function() { [native code] }

Function     //function Function() { [native code] }
Function.constructor   //function Function() { [native code] }
Function===Function.constructor  //true

函數(shù)都有prototype屬性和__proto__ 屬性。函數(shù)的__proto__ 屬性均是function () { [native code] }??梢赃@樣理解,function既是對(duì)象,又是函數(shù)。function作為對(duì)象,有__proto__ 屬性,因?yàn)開_proto__ 屬性指向構(gòu)造函數(shù)的原型,而function是由Function創(chuàng)建的,因此普通函數(shù).__proto__ =Function.prototype。

 function Person(){var a=1;}
 Person.__proto__===Function.prototype   ///true
 Function.prototype //function () { [native code] }

Function.prototype和Function.__proto__為同一對(duì)象。這是由于構(gòu)造Function的是他自己,根據(jù)普通函數(shù).__proto__ =Function.prototype,所以Function.__proto__ =Function.prototype

Function.prototype  //function () { [native code] }
Function.__proto__   // function () { [native code] }
Function.prototype===Function.__proto__   //true

Function.prototype的__proto__是Object.prototype。可以這樣理解:Function.prototype也是一個(gè)原型對(duì)象,而普通對(duì)象的原型是Object.prototype,所以

Function.prototype.__proto__===Object.prototype //true

注意:使用 Function.prototype.bind創(chuàng)造的函數(shù),沒有prototype屬性。

Object

Object.__proto__是Function.prototype。因?yàn)镺bject本身是個(gè)(構(gòu)造)函數(shù),是Function的實(shí)例。

Object.__proto__      //function () { [native code] }
Object.constructor    //function Function() { [native code] }

原型鏈的盡頭(root)是Object.prototype。所有對(duì)象均從Object.prototype繼承屬性。

Object.prototype.__proto__   // null

某個(gè)對(duì)象.__proto__ =構(gòu)造函數(shù).prototype 。

var a={};
a.__proto__===Object.prototype //true
a.__proto__ //結(jié)果見下圖

普通對(duì)象是Object構(gòu)造函數(shù)的實(shí)例,所以普通對(duì)象的原型是Object.prototype。

 function Person(){this.name="aa";}
 var b=new Person();
 b.__proto__===Person.prototype; //true
 b.__proto__ //結(jié)果見下圖

上圖中b對(duì)象是Person構(gòu)造函數(shù)的實(shí)例,所以b對(duì)象的原型是Person.prototype。

總結(jié)

1. Object和其它函數(shù)由Function產(chǎn)生,F(xiàn)unction的constructor是他自己。

2. 一個(gè)對(duì)象必定有__proto__,而原型鏈的頂端是Object.prototype。

3. Object.prototype 是對(duì)象,但是不是通過Object函數(shù)創(chuàng)建的。因?yàn)镺bject.prototype.__proto__為null。

4. Object的__proto__是Function.prototype,但是Function.prototype也是一個(gè)原型對(duì)象,因此Function.prototype.__proto__為Object.prototype。

參考自:
從__proto__和prototype來深入理解JS對(duì)象和原型鏈
Function

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/82909.html

相關(guān)文章

  • 傻傻分不清的__proto__prototype

    摘要:今天同事小英童鞋問了我一個(gè)問題小英童鞋認(rèn)為的原型對(duì)象是,所以會(huì)繼承的屬性,調(diào)用相當(dāng)于調(diào)用,但結(jié)果不是一個(gè)方法。構(gòu)造函數(shù)創(chuàng)建對(duì)象實(shí)例函數(shù)有兩個(gè)不同的內(nèi)部方法和。如果不通過關(guān)鍵字調(diào)用函數(shù),則執(zhí)行函數(shù),從而直接執(zhí)行代碼中的函數(shù)體。 今天同事小英童鞋問了我一個(gè)問題: function Foo(firstName, lastName){ this.firstName = firstNam...

    YancyYe 評(píng)論0 收藏0
  • js內(nèi)功修煉之九陽(yáng)神功--原型鏈

    摘要:寫在前面如果說是一本武學(xué)典籍,那么原型鏈就是九陽(yáng)神功。那么,如何修煉好中的九陽(yáng)神功呢真正的功法大成的技術(shù)是從底層上去理解,那種工程師和碼農(nóng)的區(qū)別就在于對(duì)底層的理解,當(dāng)你寫完一行代碼,或者你遇見一個(gè)解決的速度取決于你對(duì)底層的理解。 寫在前面 如果說JavaScript是一本武學(xué)典籍,那么原型鏈就是九陽(yáng)神功。在金庸的武俠小說里面,對(duì)九陽(yáng)神功是這樣描述的:練成「九陽(yáng)神功」后,會(huì)易筋洗髓;生出...

    蘇丹 評(píng)論0 收藏0
  • js內(nèi)功修煉之九陽(yáng)神功--原型鏈

    摘要:寫在前面如果說是一本武學(xué)典籍,那么原型鏈就是九陽(yáng)神功。那么,如何修煉好中的九陽(yáng)神功呢真正的功法大成的技術(shù)是從底層上去理解,那種工程師和碼農(nóng)的區(qū)別就在于對(duì)底層的理解,當(dāng)你寫完一行代碼,或者你遇見一個(gè)解決的速度取決于你對(duì)底層的理解。 寫在前面 如果說JavaScript是一本武學(xué)典籍,那么原型鏈就是九陽(yáng)神功。在金庸的武俠小說里面,對(duì)九陽(yáng)神功是這樣描述的:練成「九陽(yáng)神功」后,會(huì)易筋洗髓;生出...

    Profeel 評(píng)論0 收藏0
  • js內(nèi)功修煉之九陽(yáng)神功--原型鏈

    摘要:寫在前面如果說是一本武學(xué)典籍,那么原型鏈就是九陽(yáng)神功。那么,如何修煉好中的九陽(yáng)神功呢真正的功法大成的技術(shù)是從底層上去理解,那種工程師和碼農(nóng)的區(qū)別就在于對(duì)底層的理解,當(dāng)你寫完一行代碼,或者你遇見一個(gè)解決的速度取決于你對(duì)底層的理解。 寫在前面 如果說JavaScript是一本武學(xué)典籍,那么原型鏈就是九陽(yáng)神功。在金庸的武俠小說里面,對(duì)九陽(yáng)神功是這樣描述的:練成「九陽(yáng)神功」后,會(huì)易筋洗髓;生出...

    morgan 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<