2014-07-17 154 views
-1

,類似下面:無法訪問的變量我要訪問的對象變量對象

var menuSetup = { 
    m : [100,200], 
    height: m[0], // m is not defined 
} 


var menuSetup = { 
    m : [100,200], 
    height: this.m[0], // I tried this, still failed 
} 

所以我可以訪問變量中的對象?

+0

你不能,就是這樣。 – Jon

+0

不幸的是你不能這麼做...... – soktinpk

+0

你可以在對象之外定義一個變量並在兩個地方使用它。 http://jsfiddle.net/5taBt/ –

回答

0

不幸的是,你不能這樣做。這是因爲menuSetup的屬性尚未定義。例如,

var menuSetup = { 
    m: [100, 200], 
    height: menuSetup.m[0] 
}; 

將通過(鉻)TypeError: Cannot read property 'm' of undefined因爲menuSetup只是不確定

只有兩個方法,我能想到的是(因爲它是由var聲明懸掛),以

a)將m保存爲變量之前。例如:

var m = [100, 200]; 
var menuSetup = { 
    m: m, 
    height: m[0] 
} 

b)使用方法而不是變量並執行它。

var menuSetup = { 
    m: [100, 200], 
    height: function() { return this.m[0]; } 
} 

然後,當你得到menuSetup.height,你實際上做menuSetup.height()

0

你可以試試這個:

var MenuSetup = function() { 
    this.m = [100,200]; 
    this.height = this.m[0]; 
} 

var menuSetup = new MenuSetup(); 
console.log(MenuSetup.height); 
+0

我總是得到約15秒的擊敗:P – mc01

+1

構造函數不應該以大寫字母開頭,實例應該以低位開始,即'var menuSetup = new MenuSetup()'? – soktinpk

+0

@soktinpk好點,我保持OP套管,但你說得對,這是不同的,值得改變。 –

0

不是你做的方式。在JavaScript中,創建同一個對象時不能引用另一個屬性,因爲該對象直到末尾關閉}之後才存在。

您可以使用構造函數來代替,但可以在this類似問題的答案中解釋。

function MenuSetup() { 
    this.m = [100, 200]; 
    this.height = this.m[0]; 
} 

var menu = new MenuSetup(); 
console.log(menu.height) //100