所以我有一个对象:
settings: {
navBar: $(".navbar");
dropdown: navBar.find(".dropdown");
}
然而,这会引发错误navBar
未定义。使用this.navBar
似乎也无效。
对于为什么这不起作用以及访问变量的正确方法的任何见解都将非常感激。
答案 0 :(得分:3)
你的意思是你在定义一个对象时无法引用兄弟属性,如下所示:
var example = {
a: 1,
b: a + 1 // <-- a is undefined
};
这是因为此处的a
或this.a
会引用定义a
的范围内的属性example
。
您可以尝试这样的事情:
function prepareSettings(navNode)
{
return {
navBar: navNode,
dropdown: navNode.find(".dropdown")
};
}
var settings = prepareSettings( $(".navbar") );
或者在settings
中创建一个getter类型方法,wherin this
引用settings
对象,并且可以访问其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);
答案 1 :(得分:1)
无法从对象文字声明中访问navBar
属性。你必须做这样的事情:
var navBar = $(".navbar"),
settings = {
navBar: navBar,
dropdown: navBar.find(".dropdown")
};
将navBar
声明为局部变量,然后从对象声明中引用它。