当我尝试使用私有方法进行面向对象的纯JS时,我经常执行以下操作
(function(exports) {
var Foo = function(num) {
this.num = num
};
var addTwo = function() {
this.num += 2;
};
Foo.prototype.addFour = function() {
addTwo.call(this);
addTwo.call(this);
};
exports.Foo = Foo;
})(this);
Run Code Online (Sandbox Code Playgroud)
然后我就能做到
var foo = new Foo(0);
foo.addFour();
console.log(foo.num); // => 4
Run Code Online (Sandbox Code Playgroud)
它感觉很干净,它允许我创建真正的私有函数,而不是使用_前缀来表示方法应该被视为私有(但实际上不是).
这让我知道我需要哪些功能进行单元测试,哪些不需要.它还可以防止我被诱惑使用应该是私有的功能.但我没有在其他地方看到这种模式.
那么为什么其他人不使用这种模式呢?他们又做了什么呢?
很多人这样做.它在某种程度上被正式称为揭示模块模式.
好处
缺点