我知道javascript模块模式,但我使用两种类型的模块模式,并希望从架构角度了解它们之间的区别。
// PATTERN ONE
var module = (function() {
var _privateVariable = '';
var _privateMethod = function() {
var _this = this;
// private method def
// can use _this._privateVariable
console.log('Inside a private method!');
};
var publicMethod = function() {
var _this = this;
// public method def
// can use _this._privateVariable
// can call _privateMethod();
};
return {
publicMethod: publicMethod
};
})();
// PATTERN TWO
var module = (function() {
var wrapper = {
_privateVariable: '',
_privateMethod: function() {
var _this = this;
// private method def
// can use _this._privateVariable
console.log('Inside a private method!');
},
publicMethod: function() {
var _this = this;
// public method def
// can use _this._privateVariable
// can call _privateMethod();
},
};
return {
publicMethod: wrapper.publicMethod
};
})();
这两种模式似乎对我都做同样的事情
答案 0 :(得分:1)
事实上,你提到的两种模式没有区别。我看到的唯一区别是第二种模式使用wrapper
作为额外的变量,可以避免。
考虑到其他情况,你可能想要返回一个复杂的对象而不是当前的对象,那么第二个模式非常有用,
例如。
var wrapper = {
_privateVariable: '',
_privateMethod: function() {
var _this = this;
console.log('Inside a private method!');
},
publicMethod: function() {
var _this = this;
},
publicMethod2: function() {
var _this = null;
},
publicMethod3: function(default) {
var _this = default;
},
};
return {
publicMethod: wrapper
};