针对上一节: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属性。