Понимание того, как работают цепочки прототипов? - PullRequest
0 голосов
/ 31 декабря 2018

В следующем коде 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

...