2015-06-23 67 views
3

我试图通过指向一些属性与局部变量来简化一个过程。当我更改数组值时,属性也会发生变化(如预期的那样)。字符串和数字似乎没有改变其相应的对象属性。是否可以通过引用变量更改属性?如何通过引用变量更改对象属性?


var obj = { 
    prop: 0, 
    prop2: 'a', 
    prop3: [], 

    iterate: function() { 
     var ref = obj.prop, 
      ref2 = obj.prop2, 
      ref3 = obj.prop3, 
      i = 0; 

     ref++; 
     ref2 = 'b'; 
     ref3[i] = 'b'; 

     console.log(obj.prop, obj.prop2, obj.prop3); 
     //0, 'a', ['b'] 

     obj.prop++; 
     obj.prop2 = 'b'; 
     obj.prop3[i] = 'b'; 

     console.log(obj.prop, obj.prop2, obj.prop3); 
     //1, 'b', ['b'] 
    } 
} 

obj.iterate(); 
+0

谢谢你downvote没有任何解释。 :( –

+0

别担心,人们只是在审查您的申请并发现需要改进的地方。我会很快回复并更新:) –

回答

4

指向某些性质与局部变量

你不能。 JavaScript没有指针。所有变量都保存值。

当我更改数组值时,属性也会发生更改(如预期的那样)。

不是。你改变数组对象。该属性没有改变,它仍然包含对数组的引用。

为什么字符串或数字不会在其相应的对象属性中发生变化?

字符串和数字是原始值 - 你不能改变它们。您正在使用新值重新分配变量。你不重新分配财产,从而不改变它。

当您重新分配变量时,数组和其他对象也会发生同样的情况 - ref3 = [];不会更改属性。

是否可以通过参考变量更改属性?

不,您可以使用with statement,但这是鄙视。更好地明确对象属性。

+0

有趣。也许我误解了“不变性”的实际含义。谢谢! –