在下面的代码中,猫从动物继承,动物从生物继承。 我的问题是,即使在将Cat转换为Animal的原型之后,如何在Cat中定义功能仍然与cat保持一致。 请澄清吗?
var LivingBeing = function (){
this.hasSenses = true
};
LivingBeing.prototype.getSenses = function(){
return 'senses';
};
LivingBeing.prototype.customName = 'livingbeingsss'
var Animal = function Animal(){
LivingBeing.call(this);
this.voice='Animals voice'
};
Animal.prototype = Object.create(LivingBeing.prototype);
Animal.prototype.constructor = Animal;
Animal.prototype.speak = function(){
console.log(this.voice);
};
Animal.prototype.customName = 'animalsss'
var Cat = function Cat(){
Animal.call(this);
this.name='Cat';
}
Cat.prototype = Object.create(Animal.prototype);
Cat.prototype.constructor = Cat;
Cat.prototype.isacat = function (){
return true;
}
console.log(Cat.prototype);
var a = new Cat();
console.log(a);
a.speak();
console.log(a.customName);
console.log(a.isacat())
我做了一些工作来查看firefox控制台日志中的原型链。如下所示。
hasSenses: true
name: "Cat"
voice: "Animals voice"
<prototype>: {…}
constructor: function Cat()
isacat: function isacat()
<prototype>: {…}
constructor: function Animal()
customName: "animalsss"
speak: function speak()
<prototype>: {…}
constructor: function LivingBeing()
customName: "livingbeingsss"
getSenses: function getSenses()
<prototype>: {…}
__defineGetter__: function __defineGetter__()...
定义的iscat函数如何位于cat原型而非动物原型上?
我们是否将猫的原型设置为动物? 还有以下条件的输出是
a。 proto === Cat.prototype // true a。 proto === Animal.prototype // false