如何通过该构造函数的实例访问该构造函数的属性?

时间:2020-07-07 08:05:27

标签: javascript inheritance construct

这里的构造函数是Animal。它有鸭子和小猎犬两个实例。有一个名为eat()的函数,它实际上是Animal的原型。

function Animal() {
  this.color = "brown";
 }

Animal.prototype = {
  constructor: Animal,
  eat: function() {
    console.log("nom nom nom");
  }
};

let duck = Object.create(Animal.prototype); 
let beagle = Object.create(Animal.prototype); 
duck.eat();
console.log(duck.color);

这里

duck.eat() 

有效,但是鸭子也必须继承棕色吗?为什么我无法使用

访问它
duck.color ?

2 个答案:

答案 0 :(得分:3)

color上没有Animal.prototype属性。调用构造函数时,它会动态添加到对象中……但是您根本不需要调用构造函数。

如果要创建类的实例,请调用构造函数。不要使用Object.create

function Animal() {
  this.color = "brown";
 }

Animal.prototype = {
  eat: function() {
    console.log("nom nom nom");
  }
};

let duck = new Animal();
let beagle = new Animal();
duck.eat();
console.log(duck.color);

答案 1 :(得分:0)

否,它不会继承

请阅读Object.create的定义。

“ Object.create()方法使用现有对象作为新创建的对象的原型来创建新对象”

仅意味着prototype will be copied from existing object on will be placed in newly create object's prototype

这里color是实例变量而不是原型。因此在新创建的duck对象中将不可用。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/create