JavaScript 原型链
■知识点
在JavaScript中,实例对象在读取属性时,总是先检查私有属性,如果存在,则会返回私有属性值,否则就会检索prototype原型,如果找到同名属性,则返回protoype原型的属性值。
protoype原型允许引用其他对象。如果在protoype原型中没有找到指定的属性,则JavaScript将会根据引用关系,继续检索protoype原型对象的protoype原型,以此类推。
■实例设计
【示例1】下面的示例演示了对象属性查找原型的基本方法和规律。
function a (x) { //构造函数 a
this.x = x;
}
a.prototype.x = 0; //原型属性x的值为0
function b (x) { //构造函数 b
this.x = x;
}
b.prototype = new a(1); //原型对象为构造函数a的实例
function c(x){ //构造函数c
this.x = x;
}
c.prototype = new b(2); //原型对象为构造函数b的实例
var d = new c(3); //实例化构造函数c
console.log(d.x); //调用实例对象d的属性x,返回值为3
delete d.x; //删除实例对象的私有属性x
console.log(d.x); //调用实例对象d的属性x,返回值为2
delete c.prototype.x; //删除c类的原型属性x
console.log(d.x); //调用实例对象d的属性x,返回值为1
delete b.prototype.x; //删除b类的原型属性x
console.log(d.x); //调用实例对象d的属性x,返回值为0
delete a.prototype.x; //删除a类的原型属性x
console.log(d.x); //调用实例对象d的属性x,返回值为undefined
【示例2】在JavaScript中,一t刀都是对象,函数是第一型。Function和Object都是函数的实例。构造函数的父原型指向Function的原型,Function.prototype的原型是Object的原型,Object的原型也指向Function的原型,Object.prototype是所有原型的顶层。
Function.prototype.a = function(){ //Function原型方法
console.log( "Function" );
}
Object.prototype.a = function(){ //Object原型方法
console.log( "Object" );
}
function f (){ //构造函数f
this.a = "a”;
}
f.prototype = { //构造函数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是原型顶层
点击加载更多评论>>