首頁  >  文章  >  web前端  >  最詳細的 JS 原型與原型鏈介紹

最詳細的 JS 原型與原型鏈介紹

零到壹度
零到壹度原創
2018-04-13 16:47:461606瀏覽

這篇文章跟大家分享的內容是最詳細的JS 原型與原型鏈介紹,有著一定的參考價值,有需要的朋友可以參考一下

一. __proto__

JS 在創建物件(不論是普通物件還是函數物件)的時候,都有一個叫做__proto__ 的內建屬性,用來指向創建它的建構子的原型物件。
物件person1 有一個__proto__屬性,建立它的建構子是Person,建構子的原型物件是Person.prototype ,所以:
person1.__proto__ == Person.prototype

請看下圖:

《JavaScript 進階程式設計》的圖6-1

根據上面這個連接圖,我們能得到:

Person.prototype.constructor == Person;
person1.__proto__ == Person.prototype;
person1.constructor == Person;

不過,要明確的真正重要的一點就是,這個連結存在於實例(person1)與建構子(Person)的原型物件(Person.prototype)之間,而不是存在於實例(person1)與建構子(Person)之間。

注意:因為絕大部分瀏覽器都支援__proto__屬性,所以它才加入了 ES6 裡(ES5 部分瀏覽器也支持,但還不是標準)。

二. 建構器

熟悉Javascript 的童鞋都知道,我們可以這樣建立一個物件:

var obj = {}

它等同於下面這樣:

var obj = new Object()

obj 是建構子(Object)的一個實例。所以:

obj.constructor === Object
obj.__proto__ === Object.prototype

新物件 obj 是使用 new 運算子後面跟著一個建構子來建立的。建構子(Object)本身就是一個函數(就是上面說的函數物件),它和上面的建構子 Person 差不多。只不過該函數是出於創建新物件的目的而定義的。所以不要被 Object 嚇倒。


同理,可以建立物件的建構器不只有 Object,也可以是 Array,Date,Function等。
所以我們也可以建構函式來建立Array、 Date、Function

var b = new Array();
b.constructor === Array;
b.__proto__ === Array.prototype;var c = new Date(); 
c.constructor === Date;
c.__proto__ === Date.prototype;var d = new Function();
d.constructor === Function;
d.__proto__ === Function.prototype;

這些建構子都是函式物件:

函式物件

三.  原型鏈

小測試來檢驗你理解的怎麼樣:

  1. person1.__proto__ 是什麼?

  2. Person.__proto__ 是什麼?

  3. Person.prototype.__proto__ 是什麼?

  4. Object.__proto__ 是什麼?

  5. Object.prototype__proto__ 是什麼?

答案:
第一題:
因為person1.__proto__ === person1 的建構子.prototype##因為
# person1的建構子=== Person所以
person1.__proto__ === Person.prototype

第二題:

因為
Person.__proto__ === Person的建構子.prototype因為
Person的建構子=== Function所以
Person.__proto__ === Function.prototype

#第三題:


Person.prototype 是一個普通對象,我們不需要注意它有哪些屬性,只要記住它是一個普通對象。 因為一個普通物件的建構子=== Object
所以
Person.prototype.__proto__ === Object.prototype

第四題,參考第二題,因為Person 和Object 一樣都是建構子

第五題:


Object.prototype 物件也有proto屬性,但它比較特殊,為null 。因為 null 處於原型鏈的頂端,這個只能記住。
Object.prototype.__proto__ === null

以上是最詳細的 JS 原型與原型鏈介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn