如何仅使用Javascript中的引用更改对象?
var $obj = { original: true }
var $ref = $obj
// Is it possible here to set $obj to {} with only using $ref?
$ref = {} // This doesn't work
console.log($obj)
// => { original: true }
用法示例:
var $objs = {
a: {
wantsToBeAnEmptyObject: true
},
b: {
wantsToBeAnEmptyObject: true
}
}
_.forOwn($objs, (val) => {
val = {}
})
有人可以帮助我解决这个问题吗?
答案 0 :(得分:3)
是否可以仅使用$ ref将$ obj设置为{}?
不可能使用$obj
来更改哪个对象 $ref
所指。您可以更改它们都引用的对象的 state (添加,更新或删除属性),但是不能更改哪个对象 $obj
引用至。 (请注意,从对象中删除属性会在大多数JavaScript引擎上对其进行优化,从而使后续的属性访问速度大大降低。通常并不重要,因为即使“较慢”的现代引擎仍然非常非常快。但是... )
通常的解决方案是让$obj
引用一个对象,该对象的属性引用要替换的对象:
var $obj = {obj: { original: true } };
// --------^^^^^--------------------^
var $ref = $obj;
$ref.obj = { replaced: true };
// ^^^^
console.log($obj.obj.replaced) // true
答案 1 :(得分:2)
您可以使用delete
关键字从对象中删除键,我认为这可以完成您要寻找的内容。
在您的示例中,
Object.keys($ref).forEach(key=>delete $ref[key])
可以解决问题