在探索我感兴趣的JavaScript library时,我遇到了这个奇怪的IIFE。我找不到有关此模式的任何信息,并导致相信针对此用例量身定制的定制。我无法完全理解这里发生的事情,但是直觉使我认为它可能类似于Singleton模式。这是一个简短的示例,展示了我认为是代码核心的内容:
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 <=>绑定,东西<=>扩展)
关于我的问题:
答案 0 :(得分:0)
花了一些时间试图弄清楚代码的确切性质之后,我发现了它的实际用法。从这里开始,谷歌搜索这个问题变得容易多了,我立即发现This Post。这是我对问题提出的答案。随时纠正任何一个问题或添加讨论!
这似乎是尝试完成此功能的最建议的方法(?),但是This Post建议以下代码等效(并且更容易理解):
var Ctor = function(args){
var obj = function(args){
this.foo = bar
};
return new obj();
};
关于为什么要使用不太清晰的版本,我不太确定。我可以看到的唯一最大区别是,在第一个版本中,您正在创建Ctor对象,而在第二个版本中,您正在创建obj对象。第一个版本中的函数定义少了一些,也许还有一些我还没有看到的好处。但是,知道这两种模式是等效的,就可以使我更好地了解第一种模式的工作原理。