【发布时间】:2019-05-18 13:34:23
【问题描述】:
在探索我感兴趣的JavaScript library 时,我遇到了这个奇怪的 IIFE。我找不到有关此模式的任何信息,因此我相信它是为这个用例量身定制的。我不能完全理解这里发生的事情,但直觉让我认为它可能类似于单例模式。这是一个简短的示例,展示了我认为是代码的核心:
var Ctor = (function () {
function dostuff(_this, args...){}//only used within this iife
var Ctor = function (args...) {
if (!this || this === window) {
return new Ctor(args...);
}
dostuff(this, args...);
return this;
};
return Ctor;
})();
请注意,我更改了函数的名称以反映我认为它们负责的内容,但我的假设可能是错误的,并且我可能会进一步使代码难以理解。我链接到的源代码大约有 60 行,所以如果这个版本没有意义,我建议你看看提示。 (我所做的更改是 Ctor Bind,dostuff extend)
至于我的问题:
- 这是什么设计模式? (如果适用)
- 使用这种模式的灵感是什么?
- 此模式还有哪些其他实际应用?
- 是否有更标准/更易读的编写方式来产生相同的功能?
【问题讨论】:
-
var Ctor = (function () { return …; })();只是标准的 IIFE 模式,没什么特别的。 -
关于
if (!this || this === window) { return new Ctor(args...); },参见When should I automatically create an object even ifnewis forgotten? 请注意,它在 ES6 中已经过时(你应该抛出一个异常),但它提高了可用性。
标签: javascript design-patterns new-operator iife