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

資訊專欄INFORMATION COLUMN

__proto__與prototype的理解

tommego / 1869人閱讀

這篇文章主要 解決的問(wèn)題 是:什么是__proto__?什么是prototype?他們的關(guān)系是什么?在原型鏈中扮演什么角色?
proto和prototype

prototype是函數(shù)的一個(gè)屬性,在定義構(gòu)造函數(shù)的時(shí)候自動(dòng)創(chuàng)建,它指向函數(shù)的原型,被 __proto__指向。這個(gè)原型對(duì)象里包含著自定義的方法屬性。

__proto__是對(duì)象的內(nèi)部屬性,它指向構(gòu)造器的prototype,對(duì)象依賴它來(lái)進(jìn)行原型鏈的查詢,instanceof方法也是依賴它來(lái)判斷是否存在繼承關(guān)系。

prototype只能作為構(gòu)造函數(shù)的屬性,而__proto__可以作為任意對(duì)象的屬性。

proto、prototype和原型鏈之間的聯(lián)系

看一段代碼:

 function Foo(name) { this.name = name };
 Foo.prototype.age = 18;
 let student = new Foo("holy");

我們通過(guò)一張圖來(lái)表示這段代碼構(gòu)建的原型鏈:

這張圖中原型鏈可分成兩部分:

student ---> Foo.prototype ---> Object.prototype ---> null
Foo ---> Function.prototype ---> Object.prototype ---> null

我們從 對(duì)象student 看起:根據(jù) 概念3 , prototype 只能作為構(gòu)造函數(shù)的屬性,__proto__只能作為對(duì)象的屬性。所以對(duì)象sutdent 只有__proto__,沒(méi)有prototype。

student.prototype;
undefined

student對(duì)象 是Foo構(gòu)造函數(shù)的一個(gè)實(shí)例,根據(jù) 概念2 它的__proto__指向Foo.prototype

student.__ptoto__ == Foo.prototype;
true

以為 Foo.prototype 是一個(gè)對(duì)象,所以 Foo.prototype.__proto__指向 Object.prototype

Foo.prototype.__proto__ == Object.prototype;
true

再來(lái)看第二部分:
Foo 是一個(gè)函數(shù),所以 Foo.__proto__指向 Function.prototype

Foo.__proto__ == Function.prototype
true

再 JavaScript 中函數(shù)都是第一公民,而且函數(shù)也是對(duì)象,所以Function.prototype.__proto__指向 Object.prototype

Function.prototype.__proto__ == Object.prototype
true
原型鏈的工作流程

student.name 在student中找到 name屬性,返回“holy”;

student.age 在student中未找到,于是通過(guò)student.__proto__在Foo.prototype中找到,返回 18;

student.toString() 在student中未找到,接著通過(guò)student.__proto__在Foo.prototype中尋找,未找到,繼續(xù)通過(guò)Foo.prototype.__proto__在Object.prototype中尋找,找到了,返回‘[object object]’。

student.getWeight() 依次在student、Foo.prototype、Object.prototype中尋找,均未找到,拋出錯(cuò)誤。

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

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

相關(guān)文章

  • 深入理解:JavaScript原型繼承

    摘要:深入理解原型與繼承看過(guò)不少書(shū)籍,不少文章,對(duì)于原型與繼承的說(shuō)明基本上讓人不明覺(jué)厲,特別是對(duì)于習(xí)慣了面向?qū)ο缶幊痰娜藖?lái)說(shuō)更難理解,這里我就給大家說(shuō)說(shuō)我的理解。 深入理解:JavaScript原型與繼承 看過(guò)不少書(shū)籍,不少文章,對(duì)于原型與繼承的說(shuō)明基本上讓人不明覺(jué)厲,特別是對(duì)于習(xí)慣了面向?qū)ο缶幊痰娜藖?lái)說(shuō)更難理解,這里我就給大家說(shuō)說(shuō)我的理解。 首先JavaScript是一門基于原型編程的語(yǔ)言...

    mengbo 評(píng)論0 收藏0
  • 這樣理解原型原型鏈比較簡(jiǎn)單

    摘要:屬性這是每個(gè)對(duì)象都有的隱式原型屬性,指向了創(chuàng)建該對(duì)象的構(gòu)造函數(shù)的原型。 原型 在JavaScript中,有兩個(gè)原型,分別是 prototype 和 _proto_注:在ECMA-262第5版中管這個(gè) _proto_ 叫 [[Prototype]] prototype 屬性:這是一個(gè)顯式原型屬性,只有函數(shù)才擁有該屬性。_proto_ 屬性:這是每個(gè)對(duì)象都有的隱式原型屬性,指向了創(chuàng)建該對(duì)象...

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

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

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

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

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

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

0條評(píng)論

tommego

|高級(jí)講師

TA的文章

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