我有两个变量引用同一个对象,因此objectA === objectB为true。我希望能够将{}分配给objectB并让objectA保持{}但是每当我这样做时,我真的只是将objectB的引用更改为{}(我认为)所以现在是objectA和objectB指的是不同的东西。我有办法做到这一点,objectA = objectB = {},但我不喜欢这样,因为它需要在我的实现中使用循环引用。这有可能还是有更好的方法?
答案 0 :(得分:0)
创建一个复制构造函数,用于将一个对象的值复制到另一个对象,然后objectA和objectB将不相等,但它们在属性中具有相同的值。
答案 1 :(得分:0)
这是你想要达到的目标吗?
a = { foo:'Bar' }
b = Object.create(a)
创建一个以对象a
为原型的新对象。
a == b
是假的
b.foo
是"bar"
在a
中设置一个属性,也可以通过原型链在b
中使用它。
a.foo = "qux"
b.foo
也是"qux"
。
它没有相反的方法:
b.other = 'a'
a.other
是undefined
。
请注意Object.create
是ECMA Script 5的一部分,需要检查目标浏览器是否支持它:http://kangax.github.io/es5-compat-table/#Object.create
答案 2 :(得分:0)
为了在没有额外混乱的情况下做到这一点,您需要一个可以引用另一个变量的变量。这在JavaScript中是不可能的 - 变量和属性仅指值,并且严格按值传递。这意味着A中的引用是B中的引用的副本,并且为一个引用分配新引用不会直接影响另一个。
但是,通过让A和B指向同一个(可能是空的)对象,然后修改该对象的属性,可以实现类似的效果。由于两个变量都引用同一个对象,因此属性更改将出现在两个位置。它比内置的C ++风格的引用变量有点笨拙,但如果双方都知道规则,它就有用。
(最大的区别是,这个设置不会让你随意设置那些不以这种方式共享的变量。但坦率地说,我认为 good 的东西。)