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