当我尝试访问变量时,为什么我的javascript模块返回undefined?

时间:2013-06-19 10:15:39

标签: javascript module self-invoking-function

我有一个javascript模块,可以整齐地将数据与dom分开,并返回其dataui个对象的公共API:

var PtCalcApp = (function() {
    var ptCalc = ptCalc || {};

    ptCalc.ui = {
        storage: $('#pt-storage'),
        backup: {
            daily: $('#per-day-data'),
            weekly: $('#per-week-data'),
            monthly: $('#per-month-data'),
            yearly: $('#per-year-data')
        },
        change: {
            yearly: $('#annual-change'),
            daily: $('#daily-change')
        }
    };

    ptCalc.data = {
        storage: function() {
            ptCalc.ui.storage.val()
        }
    }

    return ptCalc;
})();

现在当我尝试访问这样的数据时:

PtCalcApp.data.storage()

它返回undefined。这个自调用函数模式我做错了什么?我该如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

您没有从该功能返回任何内容。如果没有return语句,该函数将返回undefined(除非使用new调用,但这是另一回事)。

storage: function() {
    ptCalc.ui.storage.val()
}

应该是

storage: function() {
    return ptCalc.ui.storage.val()
}

答案 1 :(得分:0)

PtCalcApp.ui.storage不是函数,它是属性。

您需要使用PtCalcApp.ui.storage而不是PtCalcApp.ui.storage()

来访问它

如果您想使用某个功能,则需要将其声明为

storage: function(){
    return $('pt-storage');
}