为什么在对象文字中未定义此变量?

时间:2014-05-19 16:29:13

标签: javascript jquery

出于性能原因以及以后的使用,我试图在jQuery中存储选择器的对象。

在某些情况下,我可能需要访问我正在创建的同一对象文字中的键。

(function($) {

    'use strict';

    var appCache = {

        $navSecondary: $('#nav-secondary'),
        $navMore: appCache.$navSecondary.find('.more')

    };

})(jQuery);

上面的代码产生错误:

TypeError: appCache is undefined

我该如何解决这个问题?我是否必须在jQuery中再次执行选择?

感谢。

3 个答案:

答案 0 :(得分:4)

首先评估赋值运算符的右侧。然后将结果传递给左边并分配给变量。

在构造对象时,变量为undefined,因此您无法使用其值(尽管已声明,但var语句已被提升)。

您可以在创建对象后指定新属性。

var appCache = {
    $navSecondary: $('#nav-secondary')
};
appCache["$navMore"] = appCache.$navSecondary.find('.more');

答案 1 :(得分:1)

 var appCache = {

    $navSecondary: $('#nav-secondary'),
    $navMore: appCache.$navSecondary.find('.more')
              ^^^^^^^^

};

因为您在初始化期间尝试访问变量。

答案 2 :(得分:1)

您可以改为使用函数:

$navMore: function(){return this.$navSecondary.find('.more')}

然后在对象初始化后调用它:

appCache.$navMore(); // this will return set of jQuery matched elements