JavaScript 原型鏈
■知識點(diǎn)
在JavaScript中,實例對象在讀取屬性時,總是先檢查私有屬性,如果存在,則會返回私有屬性值,否則就會檢索prototype原型,如果找到同名屬性,則返回protoype原型的屬性值。
protoype原型允許引用其他對象。如果在protoype原型中沒有找到指定的屬性,則JavaScript將會根據(jù)引用關(guān)系,繼續(xù)檢索protoype原型對象的protoype原型,以此類推。
■實例設(shè)計
【示例1】下面的示例演示了對象屬性查找原型的基本方法和規(guī)律。
function a (x) { //構(gòu)造函數(shù) a
this.x = x;
}
a.prototype.x = 0; //原型屬性x的值為0
function b (x) { //構(gòu)造函數(shù) b
this.x = x;
}
b.prototype = new a(1); //原型對象為構(gòu)造函數(shù)a的實例
function c(x){ //構(gòu)造函數(shù)c
this.x = x;
}
c.prototype = new b(2); //原型對象為構(gòu)造函數(shù)b的實例
var d = new c(3); //實例化構(gòu)造函數(shù)c
console.log(d.x); //調(diào)用實例對象d的屬性x,返回值為3
delete d.x; //刪除實例對象的私有屬性x
console.log(d.x); //調(diào)用實例對象d的屬性x,返回值為2
delete c.prototype.x; //刪除c類的原型屬性x
console.log(d.x); //調(diào)用實例對象d的屬性x,返回值為1
delete b.prototype.x; //刪除b類的原型屬性x
console.log(d.x); //調(diào)用實例對象d的屬性x,返回值為0
delete a.prototype.x; //刪除a類的原型屬性x
console.log(d.x); //調(diào)用實例對象d的屬性x,返回值為undefined
【示例2】在JavaScript中,一t刀都是對象,函數(shù)是第一型。Function和Object都是函數(shù)的實例。構(gòu)造函數(shù)的父原型指向Function的原型,F(xiàn)unction.prototype的原型是Object的原型,Object的原型也指向Function的原型,Object.prototype是所有原型的頂層。
Function.prototype.a = function(){ //Function原型方法
console.log( "Function" );
}
Object.prototype.a = function(){ //Object原型方法
console.log( "Object" );
}
function f (){ //構(gòu)造函數(shù)f
this.a = "a”;
}
f.prototype = { //構(gòu)造函數(shù)f的原型方法
w : function(){
console.log( "w" );
}
}
console.log ( f instanceof Function ); //返回 true,說明 f 是 Function 的實例
console.log ( f.prototype instanceof Object ); //返回 true,說明 f 的原型也是對象
console.log ( Function instanceof Object >; //返回 true,說明 Function 是 Object 的實例
console.log ( Function.prototype instanceof Object ); //返回 true, 說明 Function原型是 Object的實例
console.log ( Object instanceof Function ); //返回 true,說明 Object 是 Function 的實例
console.log ( Object.prototype instanceof Function ); //返回 false,說明 Object.prototype是原型頂層
點(diǎn)擊加載更多評論>>