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);
相关文章推荐
- JavaScript继承基础讲解(原型链、借用构造函数、混合模式、原型式继承、寄生式继承、寄生组合式继承)
- javascript继承之原型式继承(四)
- JavaScript继承,原型式继承
- js设计模式学习之面向对象的javascript(三)--原型式继承
- javascript 的 继承(四) 之 原型式继承
- JS学习笔记——JavaScript继承的6种方法(原型链、借用构造函数、组合、原型式、寄生式、寄生组合式)
- Javascript中类式继承和原型式继承的实现方法和区别
- javascript原型式继承。
- JavaScript高级程序设计之面向对象的程序设计之继承之原型式继承第6.3.4讲笔记
- Javascript中类式继承和原型式继承的实现方法和区别之处
- 【JavaScript学习】面向对象的程序设计(6):原型式继承
- javascript中的继承-原型式继承
- JavaScript继承基础讲解,原型链、借用构造函数、混合模式、原型式继承、寄生式继承、寄生组合式继承
- JavaScript中的继承之原型式继承
- JavaScript继承基础讲解(原型链、借用构造函数、混合模式、原型式继承、寄生式继承、寄生组合式继承)
- Javascript面向对象编程-原型式继承和复制继承
- JavaScript ----------------- 原型式继承
- JavaScript继承基础讲解(原型链、借用构造函数、混合模式、原型式继承、寄生式继承、寄生组合式继承)
- 理解JavaScript原型式继承
- JavaScript中的类式继承和原型式继承