首頁 > web前端 > js教程 > JavaScript中的原型鏈prototype介紹_javascript技巧

JavaScript中的原型鏈prototype介紹_javascript技巧

WBOY
發布: 2016-05-16 16:23:04
原創
1478 人瀏覽過

JavaScript中的繼承是透過原型鏈(prototype chain)來完成的:每個物件內部都有另一個物件作為其prototype而存在,物件從這個prototype中繼承屬性(property)。對於每個物件來說,可以用以下三種方式來存取其原型物件:

1.__proto__。可以透過物件的__proto__屬性來存取其原型物件。此屬性僅在Firefox、Safari和Chrome中得到支持,在IE和Opera中不支持。

2.Object.getPrototypeOf()。物件可以作為參數傳入Object.getPrototypeOf()方法,執行後即傳回物件的原型物件。此方法僅在ECMAScript 5標準中支援。

3.o.constructor.prototype。透過先取得物件的constructor函數,然後再透過存取constructor函數的prototype屬性來存取到原型物件。使用此方法的前提為:物件中存在指向建構函式的constructor屬性。

判斷兩個物件間是否存在原型鏈關係可以使用isPrototype()方法:


複製程式碼 程式碼如下:

var p = {x:1};
var o = Object.create(p);
console.log(p.isPrototypeOf(o));//true


對於所有以字面量建立的對象而言,其prototype對象均為Object.prototype(作為一個特殊對象,Object.prototype沒有原型對象):


複製程式碼 程式碼如下:

var x = {a:18, b:28};
console.log(x.__proto__);//Object {}


而對於所有用new操作符建立的物件而言,其prototype物件均為constructor函數的prototype屬性:


複製程式碼 程式碼如下:

var x = {a:18, b:28};
function Test(c){
  this.c = c;
}
Test.prototype = x;
var t = new Test(38);
console.log(t);//Object {c=38, a=18, b=28}
console.log(t.__proto__);//Object {a=18, b=28}
console.log(t.__proto__.__proto__);//Object {}


JavaScript中使用new運算子建立物件的過程如下:

1.建立一個新的空物件。
2.將這個物件的__proto__屬性指向constructor函數的prototype屬性。
3.將這個物件作為this參數,執行constructor函數。

從上述創建過程可以得出結論:所有從同一個constructor函數中構造出來的對象,其__proto__屬性(也即其原型對象)相等,也就是說,只存在一個原型對象:


複製程式碼 程式碼如下:

var t = new Test(38);
var t2 = new Test(68);
console.log(t === t2);//false
console.log(t.__proto__ === t2.__proto__);//true

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板