【发布时间】:2017-02-13 19:38:05
【问题描述】:
假设我有一个带有speak 函数的动物对象:
function speak() {
console.log(this.sound)
}
let animal = {
speak
}
我有一只狗,他有sound:
let dog = {
sound: "Woof!"
}
如果我想让dog 从animal 继承speak,我可以使用Object.assign 或Object.setPrototypeOf。它们似乎产生了相同的结果:
let luke = Object.assign(dog, animal)
luke.speak() // Woof!
let bruno = Object.setPrototypeOf(dog, animal)
bruno.speak() // Woof!
有什么区别?一种方式被认为是“正确”的方式?
【问题讨论】:
-
嗯,一个很大的区别是你不应该使用
Object.setPrototypeOf。如果要继承,请使用构造函数。 -
主要区别在于 Object.assign 将使用第二个对象的属性覆盖第一个对象的属性,而 Object.setPrototypeOf 将创建一个从第一个对象到第二个对象的 [[Prototype]]。