国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

__proto__與prototype的理解

tommego / 1843人閱讀

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

prototype是函數的一個屬性,在定義構造函數的時候自動創建,它指向函數的原型,被 __proto__指向。這個原型對象里包含著自定義的方法屬性。

__proto__是對象的內部屬性,它指向構造器的prototype,對象依賴它來進行原型鏈的查詢,instanceof方法也是依賴它來判斷是否存在繼承關系。

prototype只能作為構造函數的屬性,而__proto__可以作為任意對象的屬性。

proto、prototype和原型鏈之間的聯系

看一段代碼:

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

我們通過一張圖來表示這段代碼構建的原型鏈:

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

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

我們從 對象student 看起:根據 概念3 , prototype 只能作為構造函數的屬性,__proto__只能作為對象的屬性。所以對象sutdent 只有__proto__,沒有prototype。

student.prototype;
undefined

student對象 是Foo構造函數的一個實例,根據 概念2 它的__proto__指向Foo.prototype

student.__ptoto__ == Foo.prototype;
true

以為 Foo.prototype 是一個對象,所以 Foo.prototype.__proto__指向 Object.prototype

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

再來看第二部分:
Foo 是一個函數,所以 Foo.__proto__指向 Function.prototype

Foo.__proto__ == Function.prototype
true

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

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

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

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

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

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

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/92429.html

相關文章

  • 深入理解:JavaScript原型繼承

    摘要:深入理解原型與繼承看過不少書籍,不少文章,對于原型與繼承的說明基本上讓人不明覺厲,特別是對于習慣了面向對象編程的人來說更難理解,這里我就給大家說說我的理解。 深入理解:JavaScript原型與繼承 看過不少書籍,不少文章,對于原型與繼承的說明基本上讓人不明覺厲,特別是對于習慣了面向對象編程的人來說更難理解,這里我就給大家說說我的理解。 首先JavaScript是一門基于原型編程的語言...

    mengbo 評論0 收藏0
  • 這樣理解原型原型鏈比較簡單

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

    csRyan 評論0 收藏0
  • js內功修煉之九陽神功--原型鏈

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

    蘇丹 評論0 收藏0
  • js內功修煉之九陽神功--原型鏈

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

    Profeel 評論0 收藏0

發表評論

0條評論

tommego

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<