我正在编写一个JS Module模式来测试代码并使用JS Fiddle帮助我理解模式。我无法弄清楚为什么第25行和第26行的“私有方法”,当通过DOM准备好引用时,其值为 undefined 。
代码示例:
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());
});
答案 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 :)
答案 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
}