【发布时间】:2019-08-13 20:50:24
【问题描述】:
我在现代 JavaScript 中偶然发现了类似的代码:
let obj = {
data: {number: 9},
set prop(p) {
this.data = p;
},
get prop() {
return this.data;
}
};
obj = Object.assign({}, obj, {
data: {number: 2}
});
console.log('obj.data === obj.prop ', obj.data === obj.prop);
console.log('obj.data.number === obj.prop.number ', obj.data.number === obj.prop.number);
任何修改都是在计算属性之外完成的,就好像没有一样。
我期待计算的属性仍然存在。
有没有办法在调用Object.assign 后保留计算的属性?谢谢。
【问题讨论】:
-
对象分配的重点是您正在创建一个新对象,而不是对原始对象的引用。在此示例中,您的预期输出是什么?
-
我希望将属性(实际的获取和设置)分配给新对象,在新对象上调用属性并通过新的 obj.data 获取/设置。我的意思是,从概念上讲,它们都是相同的对象类型?
-
它们是相同的对象“类型”,但您使用的是 ===,这里没有两个对象会被计算为相等,即使它们的内容相同,除非一个对象引用了原始对象跨度>
-
来自您的代码:obj.data = {number: 2}, obj.prop = {number: 9},因此 obj.data != obj.prop
-
@Iracicot 即使他们俩的数字都是 9,他们仍然会评估为 false
标签: javascript computed-properties