JavaScript 原型鏈學(xué)習(xí)總結(jié)
更新時(shí)間:2010年10月29日 21:05:30 作者:
在JavaScript中,一切都是對(duì)像,函數(shù)是第一型
Function和Object都是函數(shù)的實(shí)例
Function的父原型指向到Function的原型,F(xiàn)unction的原型的父原型是Object的原型。
Object的父原型也指向到Function的原型。
一個(gè)實(shí)例的對(duì)像,它的默認(rèn)的父原型為其構(gòu)造函數(shù)的顯示原型
[每個(gè)對(duì)像都有一個(gè)隱慝的屬性用于指向到它的父對(duì)像(構(gòu)造對(duì)像的函數(shù))的原型(這里稱為父原型或隱式原型)。因?yàn)樵鸵彩菍?duì)像,所以原型也有父原型,Object的原型是所有父原型的頂層(原型根),這樣就形成了所謂原型鏈]
對(duì)像屬性訪問原則
當(dāng)從一個(gè)對(duì)像那里讀取屬性時(shí),如果對(duì)像自身屬性列表中不存在這樣的屬性,就會(huì)去自己關(guān)聯(lián)的父原型對(duì)像那里尋找,如果父原型對(duì)像屬性列表中也沒有這樣的屬性則會(huì)這個(gè)父原型的父原型那里查找,直到找到或直到對(duì)頂層原型[Object.prototype]對(duì)像屬性列表的查找完畢
調(diào)用對(duì)象的方法跟訪問屬性搜索過程一樣,因?yàn)榉椒ǖ暮瘮?shù)對(duì)象就是對(duì)象的一個(gè)屬性值。
實(shí)例:
Object.prototype.m1 = function(){
alert("我是獅子");
}
function Class1(str){
this.p1 = str;
}
function Class2(){}
Class2.prototype.m1 = function(){
alert("你好");
}
var n1 = new Class1("毛獅子");
//@__proto__屬性是對(duì)像父原型的引用
//@Object.prototype.__proto__=null
/*
n1的原型鏈
n1.__proto__=Class1.prototype
Class1.prototype.__proto__=Object.prototype
*/
var n2 = new Class2();
/*
n2的原型鏈
n2.__proto__=Class2.prototype
Class2.prototype.__proto__=Object.prototype
*/
n1.m1();//===Object.prototype.m1();
n2.m1();//===Class2.prototype.m1();
alert(n1.p1);//毛獅子
alert(n2.p1);//undefined
Function的父原型指向到Function的原型,F(xiàn)unction的原型的父原型是Object的原型。
Object的父原型也指向到Function的原型。
一個(gè)實(shí)例的對(duì)像,它的默認(rèn)的父原型為其構(gòu)造函數(shù)的顯示原型
[每個(gè)對(duì)像都有一個(gè)隱慝的屬性用于指向到它的父對(duì)像(構(gòu)造對(duì)像的函數(shù))的原型(這里稱為父原型或隱式原型)。因?yàn)樵鸵彩菍?duì)像,所以原型也有父原型,Object的原型是所有父原型的頂層(原型根),這樣就形成了所謂原型鏈]
對(duì)像屬性訪問原則
當(dāng)從一個(gè)對(duì)像那里讀取屬性時(shí),如果對(duì)像自身屬性列表中不存在這樣的屬性,就會(huì)去自己關(guān)聯(lián)的父原型對(duì)像那里尋找,如果父原型對(duì)像屬性列表中也沒有這樣的屬性則會(huì)這個(gè)父原型的父原型那里查找,直到找到或直到對(duì)頂層原型[Object.prototype]對(duì)像屬性列表的查找完畢
調(diào)用對(duì)象的方法跟訪問屬性搜索過程一樣,因?yàn)榉椒ǖ暮瘮?shù)對(duì)象就是對(duì)象的一個(gè)屬性值。
實(shí)例:
復(fù)制代碼 代碼如下:
Object.prototype.m1 = function(){
alert("我是獅子");
}
function Class1(str){
this.p1 = str;
}
function Class2(){}
Class2.prototype.m1 = function(){
alert("你好");
}
var n1 = new Class1("毛獅子");
//@__proto__屬性是對(duì)像父原型的引用
//@Object.prototype.__proto__=null
/*
n1的原型鏈
n1.__proto__=Class1.prototype
Class1.prototype.__proto__=Object.prototype
*/
var n2 = new Class2();
/*
n2的原型鏈
n2.__proto__=Class2.prototype
Class2.prototype.__proto__=Object.prototype
*/
n1.m1();//===Object.prototype.m1();
n2.m1();//===Class2.prototype.m1();
alert(n1.p1);//毛獅子
alert(n2.p1);//undefined
您可能感興趣的文章:
- javascript prototype 原型鏈
- Javascript之旅 對(duì)象的原型鏈之由來
- javascript學(xué)習(xí)筆記(九)javascript中的原型(prototype)及原型鏈的繼承方式
- 深入理解JavaScript系列(6) 強(qiáng)大的原型和原型鏈
- 基于JavaScript實(shí)現(xiàn)繼承機(jī)制之構(gòu)造函數(shù)+原型鏈混合方式的使用詳解
- 基于JavaScript實(shí)現(xiàn)繼承機(jī)制之原型鏈(prototype chaining)的詳解
- javascript學(xué)習(xí)筆記(一)基礎(chǔ)知識(shí)
- javascript學(xué)習(xí)筆記(二)數(shù)組和對(duì)象部分
- javascript學(xué)習(xí)筆記(三)BOM和DOM詳解
- javascript學(xué)習(xí)筆記(四)function函數(shù)部分
- javascript學(xué)習(xí)筆記(五)原型和原型鏈詳解
相關(guān)文章
JavaScript設(shè)計(jì)模式發(fā)布訂閱模式
這篇文章主要介紹了JavaScript設(shè)計(jì)模式發(fā)布訂閱模式,發(fā)布訂閱設(shè)計(jì)模式是和觀察者設(shè)計(jì)模式基本上相同,但是他們兩個(gè)設(shè)計(jì)模式不同的是發(fā)布訂閱者擁有一個(gè)事件處理中心而觀察者并沒有2022-06-06
利用threejs實(shí)現(xiàn)一個(gè)簡易的泊車功能
這篇文章主要為大家詳細(xì)介紹了如何利用threejs實(shí)現(xiàn)一個(gè)簡易的泊車功能,文中的示例代碼講解詳細(xì),對(duì)大家的學(xué)習(xí)和工作有一定的幫助,感興趣的小伙伴可以動(dòng)手嘗試一下2024-01-01
JS獲取字符對(duì)應(yīng)的ASCII碼實(shí)例
下面小編就為大家?guī)硪黄狫S獲取字符對(duì)應(yīng)的ASCII碼實(shí)例。小編覺得挺不錯(cuò)的,現(xiàn)在就想給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-09-09
微信小程序的運(yùn)行機(jī)制與安全機(jī)制解決方案詳解
這篇文章主要介紹了微信小程序的運(yùn)行機(jī)制與安全機(jī)制解決方案,接觸小程序有一段時(shí)間了,總得來說小程序開發(fā)門檻比較低,但其中基本的運(yùn)行機(jī)制和原理還是要懂的2023-02-02
微信小程序如何加載數(shù)據(jù)庫真實(shí)數(shù)據(jù)的實(shí)現(xiàn)
這篇文章主要介紹了微信小程序如何加載數(shù)據(jù)庫真實(shí)數(shù)據(jù)的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-03-03

