JavaScript中的繼承是通過原型鏈(prototype chain)來完成的:每個對象內部都有另外一個對象作為其prototype而存在,對象從這個prototype中繼承屬性(property)。對于每個對象來說,可以用以下三種方式來訪問其原型對象:
1.__proto__??梢酝ㄟ^對象的__proto__屬性來訪問其原型對象。該屬性僅在Firefox、Safari和Chrome中得到支持,在IE和Opera中不支持。
2.Object.getPrototypeOf()??梢詫ο笞鳛閰祩魅隣bject.getPrototypeOf()方法,執行后即返回對象的原型對象。此方法僅在ECMAScript 5標準中得到支持。
3.o.constructor.prototype。通過先獲取對象的constructor函數,然后再通過訪問constructor函數的prototype屬性來訪問到原型對象。使用此方法的前提為:對象中存在指向構造函數的constructor屬性。
判斷兩個對象間是否存在原型鏈關系可以使用isPrototype()方法:
對于所有用字面量創建的對象而言,其prototype對象均為Object.prototype(作為一個特殊對象,Object.prototype沒有原型對象):
而對于所有用new操作符創建的對象而言,其prototype對象均為constructor函數的prototype屬性:
JavaScript中使用new操作符創建對象的過程如下:
1.創建一個新的空對象。
2.將這個對象的__proto__屬性指向constructor函數的prototype屬性。
3.將這個對象作為this參數,執行constructor函數。
從上述創建過程可以得出結論:所有從同一個constructor函數中構造出來的對象,其__proto__屬性(也即其原型對象)相等,也就是說,只存在一個原型對象:
新聞熱點
疑難解答