我正在学习 Javascript 中的组合,并且想知道为什么我的代码中的 Object.assign() 向原型(prototype)的构造函数而不是对象的构造函数添加方法。我将链接下面的代码。基本上,代码是使用 Object.assign() 将两个方法(吃饭和行走)添加到 Person 对象。但是,如下图所示,控制台将方法显示为属于 Person.prototype 的构造函数,而不是属于 Person 对象本身。一定是我想多了。任何帮助表示赞赏。谢谢!
<小时/> <小时/>代码
const canEat = {
eat() {
this.hunger--;
console.log('eating');
}
};
const canWalk = {
walk: function() {
console.log('walking');
}
};
const canSwim = {
swim: function() {
console.log("swim");
}
};
function Person() {
}
Object.assign(Person,canEat,canWalk);
const person = new Person();
console.log(person);
最佳答案
当Object.assign
被评估时:
Object.assign(Person, canEat, canWalk);
eat
和 walk
属性分配给 Person
函数。
创建Person
实例时:
const person = new Person();
然后我们有一个新对象,它有 constructor属性指向 Person
函数。然而,新对象既没有 eat
也没有 walk
属性(这些属性属于 Person
[构造函数] 函数)。
如果您想让 eat
和 walk
属性可用于 Person
的实例,则应将这些方法分配给 Person。原型(prototype)
改为:
Object.assign(Person.prototype, canEat, canWalk);
因为当使用 new 创建对象时运算符,它不是继承自构造函数 Person
,而是继承自构造函数原型(prototype) Person.prototype
。
关于javascript - 为什么 Object.assign 添加到原型(prototype)的构造函数中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57122354/