JavaScript中的原型鏈prototype介紹
JavaScript中的繼承是通過原型鏈(prototype chain)來完成的:每個(gè)對象內(nèi)部都有另外一個(gè)對象作為其prototype而存在,對象從這個(gè)prototype中繼承屬性(property)。對于每個(gè)對象來說,可以用以下三種方式來訪問其原型對象:
1.__proto__??梢酝ㄟ^對象的__proto__屬性來訪問其原型對象。該屬性僅在Firefox、Safari和Chrome中得到支持,在IE和Opera中不支持。
2.Object.getPrototypeOf()??梢詫ο笞鳛閰?shù)傳入Object.getPrototypeOf()方法,執(zhí)行后即返回對象的原型對象。此方法僅在ECMAScript 5標(biāo)準(zhǔn)中得到支持。
3.o.constructor.prototype。通過先獲取對象的constructor函數(shù),然后再通過訪問constructor函數(shù)的prototype屬性來訪問到原型對象。使用此方法的前提為:對象中存在指向構(gòu)造函數(shù)的constructor屬性。
判斷兩個(gè)對象間是否存在原型鏈關(guān)系可以使用isPrototype()方法:
var p = {x:1};
var o = Object.create(p);
console.log(p.isPrototypeOf(o));//true
對于所有用字面量創(chuàng)建的對象而言,其prototype對象均為Object.prototype(作為一個(gè)特殊對象,Object.prototype沒有原型對象):
var x = {a:18, b:28};
console.log(x.__proto__);//Object {}
而對于所有用new操作符創(chuàng)建的對象而言,其prototype對象均為constructor函數(shù)的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操作符創(chuàng)建對象的過程如下:
1.創(chuàng)建一個(gè)新的空對象。
2.將這個(gè)對象的__proto__屬性指向constructor函數(shù)的prototype屬性。
3.將這個(gè)對象作為this參數(shù),執(zhí)行constructor函數(shù)。
從上述創(chuàng)建過程可以得出結(jié)論:所有從同一個(gè)constructor函數(shù)中構(gòu)造出來的對象,其__proto__屬性(也即其原型對象)相等,也就是說,只存在一個(gè)原型對象:
var t = new Test(38);
var t2 = new Test(68);
console.log(t === t2);//false
console.log(t.__proto__ === t2.__proto__);//true
相關(guān)文章
JS實(shí)現(xiàn)的透明度漸變動(dòng)畫效果示例
這篇文章主要介紹了JS實(shí)現(xiàn)的透明度漸變動(dòng)畫效果,涉及javascript響應(yīng)鼠標(biāo)事件針對頁面元素屬性動(dòng)態(tài)操作相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2018-04-04
移動(dòng)web開發(fā)之touch事件實(shí)例詳解
下面小編就為大家分享一篇移動(dòng)web開發(fā)之touch事件實(shí)例詳解,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-01-01
JS生成登錄驗(yàn)證碼的實(shí)現(xiàn)示例
本文主要介紹了JS生成登錄驗(yàn)證碼的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-12-12
javascript實(shí)現(xiàn)簡易計(jì)算器的代碼
下面小編就為大家?guī)硪黄猨avascript實(shí)現(xiàn)簡易計(jì)算器的代碼小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-05-05
JavaScript實(shí)現(xiàn)的購物車效果可以運(yùn)用在好多地方
JavaScript實(shí)現(xiàn)的購物車效果,當(dāng)然這個(gè)效果可以運(yùn)用在好多地方,比如好友的選擇,人力資源模塊等等,需要的朋友可以參考下2014-05-05
JS+canvas五子棋人機(jī)對戰(zhàn)實(shí)現(xiàn)步驟詳解
這篇文章主要介紹了JS+canvas五子棋人機(jī)對戰(zhàn)實(shí)現(xiàn)步驟詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-06-06

