如何仅使用Javascript中的引用更改对象

时间:2019-01-03 17:25:18

标签: javascript

如何仅使用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 = {}
})

有人可以帮助我解决这个问题吗?

2 个答案:

答案 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])

可以解决问题