gpt4 book ai didi

javascript - 扩展运算符不会复制原型(prototype)吗?

转载 作者:数据小太阳 更新时间:2023-10-29 05:59:47 25 4
gpt4 key购买 nike

以下代码似乎没有复制对象的原型(prototype)。

const animalProto = {
eat() {
// function body
},

sleep() {
// function body
},
}

function animalCreator(proto, attributes) {
return {...Object.create(proto), ...attributes}
}

const cat = animalCreator(animalProto, { name: 'garfield' })

cat.eat() // this is an error; function is not defined; it doesn't appear to link the prototype chain.

如果我用以下内容替换传播:

return Object.assign(Object.create(proto), attributes)

本质上我的问题是为什么 Object.assign 有效但展开运算符无效。是否有 Object.assign 正在执行的操作缺少扩展运算符?

最佳答案

参见 docs :

It copies own enumerable properties from a provided object onto a new object.

“自己可枚举”意味着原型(prototype)上的属性不会被包含在内。

如果您传播具有继承属性的对象(例如使用 Object.create 立即创建的对象),则这些继承属性都不会出现在结果中。

Object.assign 略有不同 - 它将所有属性分配给第一个到第一个的右边。如果你传递一个空对象作为第一个参数,它会更类似于传播:

return Object.assign({}, Object.create(proto), attributes)

在这种情况下,proto 中的任何内容都不会反射(reflect)在输出中。

const proto = { foo: 'bar' };
const result = Object.assign({}, Object.create(proto), { another: 'prop' });
console.log(result);

关于javascript - 扩展运算符不会复制原型(prototype)吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54164518/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com