在维护引用的同时Javascript变量赋值

时间:2014-04-24 23:41:21

标签: javascript variables variable-assignment

我有两个变量引用同一个对象,因此objectA === objectB为true。我希望能够将{}分配给objectB并让objectA保持{}但是每当我这样做时,我真的只是将objectB的引用更改为{}(我认为)所以现在是objectA和objectB指的是不同的东西。我有办法做到这一点,objectA = objectB = {},但我不喜欢这样,因为它需要在我的实现中使用循环引用。这有可能还是有更好的方法?

3 个答案:

答案 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.otherundefined


请注意Object.create是ECMA Script 5的一部分,需要检查目标浏览器是否支持它:http://kangax.github.io/es5-compat-table/#Object.create

答案 2 :(得分:0)

为了在没有额外混乱的情况下做到这一点,您需要一个可以引用另一个变量的变量。这在JavaScript中是不可能的 - 变量和属性仅指,并且严格按值传递。这意味着A中的引用是B中的引用的副本,并且为一个引用分配新引用不会直接影响另一个。

但是,通过让A和B指向同一个(可能是空的)对象,然后修改该对象的属性,可以实现类似的效果。由于两个变量都引用同一个对象,因此属性更改将出现在两个位置。它比内置的C ++风格的引用变量有点笨拙,但如果双方都知道规则,它就有用。

(最大的区别是,这个设置不会让你随意设置那些不以这种方式共享的变量。但坦率地说,我认为 good 的东西。)