В следующем коде Cat наследует от Animal, а Animal наследует от Living.Мой вопрос заключается в том, как определение функции в Cat остается с cat даже после определения прототипа Cat to Animal.Пожалуйста, уточните?
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 вместо прототипа животных?
Разве мы не установили прототип cat для животных?Также выводятся следующие условия:
a. proto === Cat.prototype // true a. proto === Animal.prototype // false