Скажем, у меня есть объект животного с speak
функции:В чем разница между Object.assign и Object.setPrototypeOf в JavaScript?
function speak() {
console.log(this.sound)
}
let animal = {
speak
}
И у меня есть собака с sound
:
let dog = {
sound: "Woof!"
}
Если я хочу dog
наследовать speak
от animal
я могу использовать Object.assign
или Object.setPrototypeOf
. Похоже, что они дают одинаковые результаты:
let luke = Object.assign(dog, animal)
luke.speak() // Woof!
let bruno = Object.setPrototypeOf(dog, animal)
bruno.speak() // Woof!
В чем разница и в каком-то смысле рассматривается как «правильный» способ?
Ну, одна большая разница в том, что вы никогда не должны использовать 'Object.setPrototypeOf'. Если вы хотите наследовать, используйте конструктор. – Ryan
Главное отличие заключается в том, что Object.assign перезапишет свойства первого объекта со свойствами второго, где Object.setPrototypeOf создаст [[Prototype]] от первого объекта ко второму. – nem035