针对上一节:javascript继承之数据绑定的假设,做如下实验:
prototype模式
先运行一段代码:
function Animal(){
this.species = "动物";
}
function Cat(name,color){
this.name = name;
this.color = color;
}
Cat.prototype = new Animal();
alert("the first cat's prototype is : "+Cat.prototype.constructor);
//the first cat's prototype is : function Animal(){
// this.species = "动物";
// }
Cat.prototype.constructor = Cat;
alert("the second cat's prototype is : "+Cat.prototype.constructor);
//the second cat's prototype is : function Cat(name,color){
// this.name = name;
// this.color = color;
// }
Cat.prototype = new Animal();我们将Cat的prototype对象指向一个Animal的实例。
Cat.prototype.constructor = Cat; 它相当于完全删除了prototype 对象原先的值,然后赋予一个新值。
但是,这是什么意思呢?
原来,任何一个prototype对象都有一个constructor属性,指向它的构造函数。
如果没有"Cat.prototype = new Animal();"这一行则Cat.prototype.constructor是指向Cat的;加了这一行以后,Cat.prototype.constructor指向Animal。
更重要的是,每一个实例也有一个constructor属性,默认调用prototype对象的constructor属性。
本文探讨了JavaScript中prototype模式的实现方式,通过具体代码演示了如何将一个构造函数的实例作为另一个构造函数的原型,并解释了constructor属性的作用。
831

被折叠的 条评论
为什么被折叠?



