gpt4 book ai didi

javascript - JS 模块模式 : why assignment in extending?

转载 作者:行者123 更新时间:2023-11-30 10:12:34 24 4
gpt4 key购买 nike

我看到很多代码here , here :

var module = (function (module) {
module.prototype.something_else = function () {
};
return module;
})(module);

为什么 var module = 部分存在?为什么 return module; 如果不需要前面的部分?

我看到用法:

var module = (function(module) {...})(module || {});

对于 module 有时还没有定义的情况……是上面的情况吗?

最佳答案

此代码块仅在模块已定义且您想扩展它(例如,添加新方法)时使用:

var module = (function (module) {
module.prototype.something_else = function () {
};
return module;
})(module);

它接受module作为输入参数并返回扩展的module。然后 var module = 的赋值替换了原来的 module

一一回答您的问题:

Why var module = part present at all?

在上面的示例中(取自您的第一个 URL),var module = 不是必需的。他们提供的简单示例很愚蠢。你可以用这个完成完全相同的事情:

module.prototype.something_else = function () {};

使用上述模式扩展类对于第二个 URL ( http://www.adequatelygood.com/JavaScript-Module-Pattern-In-Depth.html) 中提供的示例更有意义:

var MODULE = (function (my) {
var old_moduleMethod = my.moduleMethod;

my.moduleMethod = function () {
// method override, has access to old through old_moduleMethod...
};

return my;
}(MODULE));

立即执行函数创建一个新范围,我们可以在其中保留旧方法 var old_moduleMethod = my.moduleMethod;

下一个问题:

And why return module; if previous part is not needed?

您需要 return module,否则该函数将不会返回任何内容,并且 var module = 赋值将设置为未定义的值。

下一个问题:

for cases when module wasn't already defined sometimes... Is that above case?

是的,是这样的。如果未定义 module,则需要传入一个空对象。但是,如果一开始没有定义对象,您通常会使用模式来扩展对象。那将毫无意义,只会使您的代码复杂化。

关于javascript - JS 模块模式 : why assignment in extending?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25652848/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com