當前位置:才華齋>設計>網頁設計>

javascript程式設計

網頁設計 閱讀(1.5W)

javascript的原型鏈有顯式和隱式兩種:

javascript程式設計

顯式原型鏈:即我們常見的prototype;

隱式原型鏈:在一般環境下無法訪問,即不可見,在FireFox下可以通過__proto__方式訪問;隱式原型鏈用於javascript引擎內部對原型鏈的搜尋,通過顯示原型鏈來設定;

一、prototype和__proto__的概念

prototype是函式的一個屬性(每個函式都有一個prototype屬性),這個屬性是一個指標,指向一個物件。它是顯示修改物件的原型的屬性。

__proto__是一個物件擁有的內建屬性(請注意:prototype是函式的內建屬性,__proto__是物件的內建屬性),是JS內部使用尋找原型鏈的屬性。

用chrome和FF都可以訪問到物件的__proto__屬性,IE不可以。

二、new 的過程

var Person = function(){};var p = new Person();

new的過程拆分成以下三步:

(1) var p={}; 也就是說,初始化一個物件p

(2) p.__proto__ = otype;

(3) (p); 也就是說構造p,也可以稱之為初始化p

關鍵在於第二步,我們來證明一下:

var Person = function(){};var p = new Person();alert(p.__proto__ === otype);

這段程式碼會返回true。說明我們步驟2是正確的.。

三、示例

var Person = function(){};ame = function() { alert("My Name is Jacky");}; = 27;var p = new Person();ame();

p是一個引用指向Person的物件。我們在Person的原型上定義了一個sayName方法和age屬性,當我們執行時,會先在this的內部查詢(也就是建構函式內部),如果沒有找到然後再沿著原型鏈向上追溯。

這裡的向上追溯是怎麼向上的呢?這裡就要使用__proto__屬性來連結到原型(也就是otype)進行查詢。最終在原型上找到了age屬性。