这里的构造函数是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 ?
答案 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