了解原型链如何工作?

时间:2018-12-31 15:11:47

标签: javascript prototype-chain

在下面的代码中,猫从动物继承,动物从生物继承。 我的问题是,即使在将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

0 个答案:

没有答案