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