提问人:Karolina Hudziec 提问时间:1/28/2023 更新时间:7/2/2023 访问量:69
在传播对象时使用“this”关键字
Use 'this' keyword while spreading an object
问:
我有一个不寻常的问题。我试图实现的是修改对象的属性,同时通过方法进行传播。例
const obj1 = {
prop1: "value1",
prop2: function() {
this.prop1 = 10
return "value2"
}
}
const obj2 = {
...obj1,
prop2: obj1.prop2()
}
现在,我希望 obj2 看起来像这样:
{
prop1: 10,
prop2: "value2"
}
但是由于这个范围,只有 obj1 中的 prop1 发生了变化,obj2 看起来像这样:
{
prop1: "value1",
prop2: "value2"
}
我知道我可以在之后直接更改 obj1.prop1,但问题是代码的第二部分(obj2 初始化)在我的项目使用的包之一中,并且不想修改它。我唯一控制的是我进一步传递的 obj1。有没有办法在不修改软件包源代码的情况下做到这一点?
答:
0赞
obe
1/28/2023
#1
您可以通过将初始化更改为以下内容来实现它:obj2
const obj2 = {
prop2: obj1.prop2(),
...obj1,
prop2: obj1.prop2(),
}
但就像评论中提到的其他人一样 - 这很臭......
在此代码段中:
const obj1 = {
prop1: "value1",
prop2: function() {
this.prop1 = 10
return "value2"
}
}
在 getter 函数中修改是一个副作用,被认为是代码异味。prop1
prop2
0赞
lchennl
1/28/2023
#2
我不知道你的用例,但也许你可以做以下事情。 将包含您需要的结果obj3
const obj1 = {
prop1: "value1",
prop2: function () {
this.prop1 = 10;
return "value2";
}
};
const obj2 = {
...obj1,
prop2: obj1.prop2()
};
const prop2 = obj1.prop2;
const prop2Value = obj1.prop2();
const obj3 = {...obj1, ...prop2, prop2: prop2Value};
console.log(obj1);
console.log(obj2);
console.log(obj3);
评论
obj.prop1