准备好DOM的Javascript模块模式

时间:2014-06-09 14:36:48

标签: javascript jquery

我正在编写一个JS Module模式来测试代码并使用JS Fiddle帮助我理解模式。我无法弄清楚为什么第25行和第26行的“私有方法”,当通过DOM准备好引用时,其值为 undefined

JSFiddle

代码示例:

var obj = {
    key: "value"
};

var Module = (function () {

  var innerVar = "5";

  console.log("obj var in Module:");
  console.log(obj);

function privateFunction() {
    console.log("privateFunction() called.");
    innerFunction();

    function innerFunction() {
        console.log("inner function of (private function) called.");
    }
}

function _numTwo() {
    console.log("_numTwo() function called.");
}
return {
    test: privateFunction,
    numTwo: _numTwo

}


}(obj));


$(document).ready(function () {
    console.log("$ Dom Ready");
    console.log("Module in Dom Ready: ");
    console.log(Module.test());
});

3 个答案:

答案 0 :(得分:3)

您正在将调用privateFunction的返回结果输出到控制台,在这种情况下没有。

...
function privateFunction() {
    console.log("privateFunction() called.");
    innerFunction();

    function innerFunction() {
        console.log("inner function of (private function) called.");
    }
    return 'not undefined :)';
}
...

控制台输出:

obj var in Module: (index):30
Object {key: "value"} (index):31
$ Dom Ready (index):57
Module in Dom Ready:  (index):58
privateFunction() called. (index):34
inner function of (private function) called. (index):38
not undefined :) 

See the updated jsFiddle for details

答案 1 :(得分:1)

在对象返回上:

return {
    test: privateFunction(),
    numTwo: _numTwo()

}

您正在调用该函数,您没有传递它的引用:)。

删除括号,它应该可以工作。

return {
    test: privateFunction,
    numTwo: _numTwo

}

另一种做事方式是:

return {
    test: function() { return privateFunction(); },
    numTwo: function() { return _numTwo(); }
}

这会将函数返回给另一个变量,或者只是调用方法中的函数。

问候。

答案 2 :(得分:0)

您似乎在调用return中的2个函数,而不是将它们分配给test / numTwo属性。

也许你可以试试这个:

return {
    test: privateFunction,
    numTwo: _numTwo
}