JavaScript 原型鏈學習總結
更新時間:2010年10月29日 21:05:30 作者:
在JavaScript中,一切都是對像,函數(shù)是第一型
Function和Object都是函數(shù)的實例
Function的父原型指向到Function的原型,F(xiàn)unction的原型的父原型是Object的原型。
Object的父原型也指向到Function的原型。
一個實例的對像,它的默認的父原型為其構造函數(shù)的顯示原型
[每個對像都有一個隱慝的屬性用于指向到它的父對像(構造對像的函數(shù))的原型(這里稱為父原型或隱式原型)。因為原型也是對像,所以原型也有父原型,Object的原型是所有父原型的頂層(原型根),這樣就形成了所謂原型鏈]
對像屬性訪問原則
當從一個對像那里讀取屬性時,如果對像自身屬性列表中不存在這樣的屬性,就會去自己關聯(lián)的父原型對像那里尋找,如果父原型對像屬性列表中也沒有這樣的屬性則會這個父原型的父原型那里查找,直到找到或直到對頂層原型[Object.prototype]對像屬性列表的查找完畢
調用對象的方法跟訪問屬性搜索過程一樣,因為方法的函數(shù)對象就是對象的一個屬性值。
實例:
Object.prototype.m1 = function(){
alert("我是獅子");
}
function Class1(str){
this.p1 = str;
}
function Class2(){}
Class2.prototype.m1 = function(){
alert("你好");
}
var n1 = new Class1("毛獅子");
//@__proto__屬性是對像父原型的引用
//@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的原型。
一個實例的對像,它的默認的父原型為其構造函數(shù)的顯示原型
[每個對像都有一個隱慝的屬性用于指向到它的父對像(構造對像的函數(shù))的原型(這里稱為父原型或隱式原型)。因為原型也是對像,所以原型也有父原型,Object的原型是所有父原型的頂層(原型根),這樣就形成了所謂原型鏈]
對像屬性訪問原則
當從一個對像那里讀取屬性時,如果對像自身屬性列表中不存在這樣的屬性,就會去自己關聯(lián)的父原型對像那里尋找,如果父原型對像屬性列表中也沒有這樣的屬性則會這個父原型的父原型那里查找,直到找到或直到對頂層原型[Object.prototype]對像屬性列表的查找完畢
調用對象的方法跟訪問屬性搜索過程一樣,因為方法的函數(shù)對象就是對象的一個屬性值。
實例:
復制代碼 代碼如下:
Object.prototype.m1 = function(){
alert("我是獅子");
}
function Class1(str){
this.p1 = str;
}
function Class2(){}
Class2.prototype.m1 = function(){
alert("你好");
}
var n1 = new Class1("毛獅子");
//@__proto__屬性是對像父原型的引用
//@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之旅 對象的原型鏈之由來
- javascript學習筆記(九)javascript中的原型(prototype)及原型鏈的繼承方式
- 深入理解JavaScript系列(6) 強大的原型和原型鏈
- 基于JavaScript實現(xiàn)繼承機制之構造函數(shù)+原型鏈混合方式的使用詳解
- 基于JavaScript實現(xiàn)繼承機制之原型鏈(prototype chaining)的詳解
- javascript學習筆記(一)基礎知識
- javascript學習筆記(二)數(shù)組和對象部分
- javascript學習筆記(三)BOM和DOM詳解
- javascript學習筆記(四)function函數(shù)部分
- javascript學習筆記(五)原型和原型鏈詳解
相關文章
微信小程序如何加載數(shù)據(jù)庫真實數(shù)據(jù)的實現(xiàn)
這篇文章主要介紹了微信小程序如何加載數(shù)據(jù)庫真實數(shù)據(jù)的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-03-03