3 回答

TA贡献1872条经验 获得超3个赞
您打赌JavaScript中有指针;对象是指针。
//this will make object1 point to the memory location that object2 is pointing at
object1 = object2;
//this will make object2 point to the memory location that object1 is pointing at
function myfunc(object2){}
myfunc(object1);
如果不再指向存储位置,则该位置的数据将丢失。
与C语言不同,您看不到指针的实际地址或指针的实际值,只能取消引用它(在它指向的地址处获取值)。

TA贡献1836条经验 获得超4个赞
由于JS的本质,即按值(如果完全更改了引用对象)或通过引用(如果更改了引用对象的字段)传递对象,则不可能完全替换引用的对象。
但是,让我们使用可用的方法:替换引用对象的单个字段。通过执行此操作,以下功能可实现您的要求:
function replaceReferencedObj(refObj, newObj) {
let keysR = Object.keys(refObj);
let keysN = Object.keys(newObj);
for (let i = 0; i < keysR.length; i++) {
delete refObj[keysR[i]];
}
for (let i = 0; i < keysN.length; i++) {
refObj[keysN[i]] = newObj[keysN[i]];
}
}
对于user3015682给出的示例,您将使用以下功能:
replaceReferencedObj(foo, {'bar': 2})
添加回答
举报