Tom*_*atz 2 javascript oop parentheses
我遇到了一个自执行函数,它在声明包含var的条件下执行,如果它不存在则传递一个对象.
例:
var myFunc = (function(myFunc){}(myFunc || {}));
Run Code Online (Sandbox Code Playgroud)
为什么有一个"或"条件运算符传递一个对象?
您提供的代码是模块模式的示例.特别是它是模块模式松散增强的一个例子.
模块模式基本上只是一个返回对象的立即调用的函数表达式(IIFE).例如:
// file 1
var MODULE = (function () {
var my = {}, privateVariable = 1;
function privateMethod() {
// ...
}
my.moduleProperty = 1;
my.moduleMethod = function () {
// ...
};
return my;
}());
Run Code Online (Sandbox Code Playgroud)
增强功能允许您将模块拆分为多个部分.每个部分都可以驻留在它自己的文件中.例如,我们可以按如下方式扩充上述模块:
// file 2
var MODULE = (function (my) {
my.anotherMethod = function () {
// added method...
};
return my;
}(MODULE));
Run Code Online (Sandbox Code Playgroud)
但是在这种增强模式中file 1必须先加载,file 2否则你会收到错误.松散扩充允许您以任何顺序加载文件.
var MODULE = (function (my) {
// add capabilities...
return my;
}(MODULE || {}));
Run Code Online (Sandbox Code Playgroud)
在上面的例子中,模块MODULE可以分成多个文件,可以按任何顺序加载.表达式MODULE || {}计算MODULE它是否存在.否则它评估为{}.
因此,对于加载的第一个文件,表达式将评估为{}因为MODULE最初是undefined.在后续文件中,表达式将评估为MODULE.