javascript的继承和java不同,不是基于class实现,而是基于prototype实现的。
function Animal(nAge){ this.age = nAge; } Animal.prototype.eat = function(){ // eat something }; function Cat(sName){ this.name = sName; } Cat.prototype = new Animal(); Cat.prototype.constructor = Cat; var cat = new Cat("kitty"); cat.eat();
其中
Cat.prototype.constructor = Cat;
这行代码的作用是:
默认情况下,Cat.prototype.constructor是Cat。但是为了使Cat继承Animal,设置了
Cat.prototype = new Animal();
将Cat.prototype设置为Animal的一个实例。于是这个时候Cat.prototype.constructor就成了Animal实例的constructor,即Animal.prototype.constructor,也就是Animal。所以为了不丢失cat的构造函数,需要手工设置
Cat.prototype.constructor = Cat;
使构造函数指向Cat。在javascript中使用继承时,要务必注意这一点。任何情况下如果给Cat.prototype赋值了,比如
Cat.prototype = {};
那么接下来一定要手工设置Cat.prototype.constructor的值。