2013-05-28 20 views
1

訪問變量所以我有一個對象:的JavaScript物件

settings: { 
    navBar: $(".navbar"); 
    dropdown: navBar.find(".dropdown"); 
} 

但是,這將引發沒有定義navBar錯誤。使用this.navBar似乎也不工作。

任何洞察爲什麼這不起作用,並正確的方式來訪問變量將不勝感激。

+2

閱讀JSON – Tom

+0

嘗試'var navBar = $(「。navbar」); ... ... 設置:{ navBar:navBar; dropdown:navBar.find(「。dropdown」); }' –

+0

這是因爲你甚至沒有對象。 –

回答

3

你是說你有問題指的是同級屬性,當你定義一個對象,像這樣:

var example = { 
    a: 1, 
    b: a + 1 // <-- a is undefined 
}; 

這是因爲athis.a這裏要提到的財產a範圍內確定example

你可以嘗試這樣的事:

function prepareSettings(navNode) 
{ 
    return { 
     navBar: navNode, 
     dropdown: navNode.find(".dropdown") 
    }; 
} 

var settings = prepareSettings($(".navbar")); 

或在settings創建一個getter類型的方法,wherin thissettings對象,並具有其navBar屬性訪問:

var settings = { 
    navBar: $(".navbar"), 
    getDropdown: function() 
    { 
     return this.navBar.find(".dropdown"); 
    } 
}; 

一您遇到的問題的更清晰的示例可能如下所示:

var a = 5; 
var test = { 
    a: 3, 
    b: a 
}; 


// Output is 5 rather than 3, which you might have 
// been expecting instead. 
console.log(test.b); 
+0

謝謝,這對我來說是一個解釋。我不知道你無法訪問兄弟變量。雖然煩人,至少我沒有做任何蠢事,這是一種解脫。 – user2297440

+0

@ user2297440目前看起來可能很煩人,但隨着你的進步,你最終會意識到這是完全合理的。 – Marty

1

navBar屬性不能從對象字面聲明內部訪問。你必須做這樣的事情:

var navBar = $(".navbar"), 
    settings = { 
     navBar: navBar, 
     dropdown: navBar.find(".dropdown") 
    }; 

申報navBar作爲一個局部變量,然後請參閱從你的對象聲明中它。