2016-01-13 44 views
4
var A = []; 

var obj = { 
    x: A[1], 
    y: 'hello' 
}; 

A[1] = 1; 

console.log(JSON.stringify(obj)); // {"y":"hello"} 

通過我在console.log()使用obj時,A[1]已定義。更新對象屬性,最初被設置爲未定義的數組元素

如何獲取「最新」obj及其所有屬性更新?當我們做console.log()時,我們得到{"x":1,"y":"hello"}

+0

在話題的說明[第](https://github.com/angular/angular.js/wiki/Understanding-Scopes)(見#JavaScript的原型繼承部分)。 – Vidul

回答

3

你得到的最新對象。如果您希望x屬性更新爲其分配值在整個代碼運行期間發生變化,您需要使用一個對象,因爲它只會存儲對其的引用,並且隨着內存中的位置發生更改,您將在各處看到這些更改分配它。數組被視爲對象,因此您可以將A指定爲x

var A = []; 

var obj = { 
    x: A, 
    y: 'hello' 
}; 

A[1] = 1; 

alert(JSON.stringify(obj)); 

使用對象作爲值又如:

var A = []; 
var B = {}; 
A[1] = B; 

var obj = { 
    x: A[1], 
    y: 'hello' 
}; 

B.z = 1; 

alert(JSON.stringify(obj)); 
+0

'{「x」:[null,1],「y」:「hello」}'? – Andy

+2

那麼簡單就是因爲A [0]從未實例化過。但是原始值不是引用。如果您希望隨時間看到該屬性更新,則需要爲其分配一個對象的引用。我選擇了該數組作爲該對象,以便您可以看到它的所有值。 – AtheistP3ace

+0

是否可以將'var'引用爲'obj.x'的值?所以如果這個var改變'obj.x'就會反映出來。我想不是 – user7

3

A[1] = 1;實際上是在已經構建obj時定義的。所以obj.x總是undefined

var A = []; 
 
A[1] = 1; 
 
var obj = { 
 
    x: A[1], 
 
    y: 'hello' 
 
}; 
 
document.body.textContent = JSON.stringify(obj);

0

JavaScript對象不被重新初始化參考。 您需要執行obj.x = 1來更新對象。

3

假設你想作爲一個原始的obj.x值:

這是不可能的var的引用賦予obj.x。你可以obj.x作爲會得到的最新值的函數可變

var variable= 2 
var obj = { 
    x: function() { 
     return variable; 
    }, 
    y: 'hello' 
    }; 

    variable = 5; 

    console.log(obj.x()); //prints 5