关于继承我不了解的几件事

我已经创建了一个关于“继承”的表格。

  1. 比较---原型---> Animal.prototype(constructor,run)

  2. 兔子--- [[prototype]] --->比较

  3. 兔子---原型--->动物

  4. Rabbit.prototype --- [[[prototype]] ---> Animal.prototype(constructor,run)

  5. rabbit(name:'White Rabbit')--- [[[prototype]] ---> Rabbit.prototype

  6. 兔子(名字:'白兔子')--- prototype ---> Rabbit

  • 认为他们是真的。但是,请指定是否有错误。我写了一些代码来理解“继承”的主题。但是有几个没有给我想要的结果。但是有几个没有给我想要的结果。(注释行中的规范)

 class Animal {

    constructor(name, speed) {

      this.speed = speed;

      this.name = name;

    }


    run(speed = 0) {

      this.speed += speed;

      console.log(`${this.name} runs with speed ${this.speed}.`);

    }


    static compare(animalA, animalB) {

      console.log(animalA.speed - animalB.speed);

    }

  }


  class Rabbit extends Animal {

    hide() {

      console.log(`${this.name} hides!`);

    }

  }


  let rabbits = [

    new Rabbit("White Rabbit", 5),

    new Rabbit("Black Rabbit", 10)

  ];


  console.log(Rabbit.__proto__ === Animal); // true (not problem)


  console.log(Animal.__proto__ === Function.prototype); // true (not problem)


  console.log(Rabbit.__proto__ === Animal.prototype); //(not problem)

  console.log(Rabbit.__proto__.prototype === Animal.prototype); //(not problem)

  

  console.log(rabbits[1].__proto__ === Animal.prototype); 

  // this problem

  // rabbit(name:'White Rabbit') ---[[prototype]]---> Rabbit.prototype ?


富国沪深
浏览 158回答 3
3回答

慕田峪9158850

兔子是一个对象兔子,而不是动物(直接),所以兔子的原型将指向兔原,和兔子的原型将指向动物的原检查这个rabbits[1].__proto__ === Rabbit.prototype

慕码人8056858

当您创建Rabbit类的对象[rabbit]时,它将获得Rabbit.prototype作为其[[Prototype]]属性。和兔子。proto(即[[Prototype]])获取Animamal.prototype属性。因此,这就是兔子继承其祖先属性的方式。rabbit[1]<--(Inherits&nbsp;from&nbsp;Rabbbit&nbsp;which&nbsp;is&nbsp;rabbit[1].__proto__)&nbsp;<--&nbsp;(Inherits&nbsp;from&nbsp;Animal&nbsp;rabbit[1].__proto__.__proto__)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript