构造函数模式下的自执行函数
Self Executing Function in Constructor Pattern
我最近遇到了以下模式:
/* PATTERN 1 */
(function(window) {
var Stuff = (function() { // Variable assignment and self-invoking anonymous function
function Stuff(params) {
this.items = [];
}
Stuff.prototype = {
someMethod1: function() {
},
someMethod2: function() {
}
};
return Stuff;
}()); // END Variable assignment
Stuff.create = function(params) {
return new Stuff(params);
};
window.Stuff = Stuff;
}(window));
让我困惑的是分配Stuff
变量所起的作用。具体来说,此模式在操作上与以下模式有何不同:
/* PATTERN 2 */
(function(window) {
// No variable assignment or self-invoking anonymous function
function Stuff(params) {
this.items = [];
}
Stuff.prototype = {
someMethod1: function() {
},
someMethod2: function() {
}
};
Stuff.create = function(params) {
return new Stuff(params);
};
window.Stuff = Stuff;
}(window));
模式1的原型方法的范围在某种程度上是私有的,而模式2的原型方法不是?这纯粹是为了更清晰地分离业务逻辑的一种风格方法吗?
完全没有区别。内部IIFE是完全没有意义的,因为它没有任何局部变量,可以安全地省略。唯一(一点)不同的是,外部IIFE中的Stuff
现在是一个函数声明,而不是一个赋值给变量的函数。
当然,就其现状而言,外部的IEFE也相当无用,除了可能用于代码组织。
这两种模式都允许您轻松地创建附加到Stuff "类"上的真正私有变量,但不能在它之外访问:
var Stuff = (function() { // Variable assignment and self-invoking anonymous function
var stuff_private = "stuff";
function Stuff(params) {
this.items = [];
}
Stuff.prototype = {
someMethod1: function() {
},
someMethod2: function() {
}
getStuff: function() {
return stuff_private;
}
};
return Stuff;
}()); // END Variable assignment
stuff_private
现在嵌入在Stuff的范围内,但它对外部世界是不可见的。您也可以在第二种模式中这样做,但是如果您在同一个文件中创建多个类,每个类都有自己的私有变量,那么第一种模式可能是有意义的。
相关文章:
- 如何做到这一点,使代码在不传递条件后执行函数
- javascript自执行函数-不同的语法
- JavaScript:只有当数组中的所有项都为true时才执行函数
- iFrame url更改时执行函数
- 为什么AngularJS在每个摘要循环上都执行函数
- 如何使用setInterval执行函数
- 当*ngFor以角度2结束时执行函数
- Ajax调用完成后如何执行函数
- 在显示引导弹出窗口之前执行函数
- 从自执行函数返回函数的Javascript性能命中率
- 在操作完成时执行函数
- jquery/js中的自执行函数
- 如何仅在完成对gap.client.youtube的请求.execute后执行函数
- 构造函数函数中的自执行函数的OO上下文/范围
- Javascript未使用=运算符执行函数
- AngularJS:如何按照预定义的顺序执行函数
- 在不使用隔离作用域的情况下执行函数的角度指令
- 如何在页面加载后执行函数是在 AngularJS 中完成的
- 完成页面加载后执行函数
- 如何在完成完全执行函数后触发循环