您的位置:首页 > Web前端 > JavaScript

JavaScript原型式继承的迷惑

2010-03-14 10:00 281 查看

1、 对象中的原型链[[proto]]

JavaScript中的每个对象创建的时候系统都会自动为其分配一个原型属性[[proto]],

用来连接到他的原型对象。在JavaScript中就是通过每个对象中的[[proto]]来实现对象

的继承关系的。但是对象的[[proto]]属性在JavaScript是不能访问和修改的,他是作为

一个内部的属性存在的,而且是在对象被创建的同时由系统自动设定的。
当访问一个对象的某一属性,如果这个属性在此对象中不存在,就在他的[[proto]]所指

的原型对象的属性中寻找,如果找到则返回,否则继续沿着[[proto]]链一直找下去,直到

[[proto]]的连接为null的时候停止。
关键:一旦对象创建,他的[[proto]]属性是不能被直接访问和修改的,只能通过链式
查找进行访问。大家一定要区分对象中的[[proto]]属性和函数对象中的prototype属性

2、 代码分析--原型式继承的实现

代码

/* Clone function. */

function clone(object) {
function F() {}
F.prototype = object;
return new F;
}

var Person = {
name: 'default name',
getName: function() {
return this.name;
}
};

var reader = clone(Person);
alert(reader.getName()); // This will output 'default name'.
reader.name = 'John Smith';//通过这条语句,reader对象有了自己的name属性。原来person对象name属性不会发生任何变化。
alert(reader.getName()); // This will now output 'John Smith'.
alert(Person.getName());

下面的代码,也是同样的问题:

//alert("dd");
function bb(){}
bb.prototype={
a:1,
b:function(){
alert(this.a);
this.a=3; //相关对象有了自己的属性a
alert("-----");
alert(bb.prototype.a);//prototype不会变
}
};
gg=new bb();
alert(gg.a);
gg.b();
alert(gg.a);
hh=new bb();
alert(hh.a);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐