1

所以我有一个对象:

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

但是,这会引发错误navBar未定义。使用this.navBar似乎也不起作用。

任何关于为什么这不起作用以及访问变量的正确方法的见解将不胜感激。

4

2 回答 2

3

您的意思是在定义对象时引用同级属性时遇到问题,如下所示:

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

这是因为aorthis.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);
于 2013-05-28T04:07:53.067 回答
1

navBar无法从对象文字声明内部访问该属性。你必须做这样的事情:

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

声明navBar为局部变量,然后从对象声明中引用它。

于 2013-05-28T04:04:41.127 回答