2015-06-23 122 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

有趣。也許我誤解了「不變性」的實際含義。謝謝! –