2

我刚刚阅读了一篇关于 Java Script 中模块模式的代码项目的小文章。阅读 javascript 代码后,很少有区域不是很清楚代码的编写方式。我写了 javascript,但我不熟悉提前写 javascript。这是我从 codeproject http://www.codeproject.com/Articles/619747/Module-Pattern-in-Java-Script-in-Depth读取的 url

1) // 一个函数,生成一个新的加数函数

function addGenerator(num) {
    // Return a simple function for adding two numbers
    // with the first number borrowed from the generator
    return function (toAdd) {
        return num + toAdd
    };
}
// addFive now contains a function that takes one argument,
// adds five to it, and returns the resulting number
var addFive = addGenerator(5);
// We can see here that the result of the addFive function is 9,
// when passed an argument of 4
alert(addFive(4) == 9);   // Which return true

当 addGenerator 调用时, 5 已作为参数传递,但我只是不明白这一行它是如何工作的

return function (toAdd) {
        return num + toAdd
    };

addGenerator(5) 会返回什么?

这将如何返回 true --> alert(addFive(4) == 9); // 返回真

2)

var EmployeeModule = (function (my) {
                my.anotherFunction = function () {
                    return alert('this is another function.');
                };
            } (EmployeeModule));

上面的代码将如何工作&将被调用?请详细说明他们要做什么?

3)

var EmployeeModule = (function (my) {
    // add functionality...
    return my;
}(EmployeeModule || {}));

我只是不明白这一行(EmployeeModule || {}))请解释这一行的含义。

4) 模块模式中的全局导入

我们还可以在我们的模块中导入其他 java 脚本库

(function ($, Y) {
    // now have access to globals jQuery (as $) and YAHOO (as Y) in this code
}(jQuery, YAHOO));

Sub-modules in Module Pattern

在很多情况下,我们可以创建子模块。这就像创建一个常规模块 复制代码

EmployeeModule.subModule = (function () {
    var my = {};
    // ...
    return my;
}());

为上述代码点明智地寻找更好的解释,并提供更多示例以获得更好的解释。谢谢

4

1 回答 1

0

我不经常使用模块模式,所以我无法回答你关于这个主题的所有问题。我想解决你关于EmployeeModule || {}

我认为在不使用模块模式的常规上下文中更容易理解这意味着什么。考虑一下。

var foo = foo || {};

这是检查是否foo已经存在。如果是这样,我们不覆盖,我们只是将其设置为等于自身...与此相同:

var foo = {bar:'value'};
var foo = foo;

如果 foo 不存在,那么我们正在创建一个新对象,如下所示:

var foo = {};

所以,代码说“foo 等于前一个 foo(如果 foo 已经是某物)或一个新对象(如果 foo 还不是某物)”

在您的示例中,EmployeeModule || {}将作为参数传递到即时调用的函数表达式中my。如果EmployeeModule是某事,则设置为my. 如果EmployeeModule什么都没有,那么 的值my就是一个新对象。

于 2013-07-19T06:43:10.383 回答