我一直在研究为我的团队提出标准化的 Javascript 编码风格。现在大多数资源都推荐涉及闭包的“模块”模式,例如:
var Module = function() {
someMethod = function() { /* ... */ };
return {
someMethod: someMethod
};
}();
并像Module.someMethod();
. 这种方法似乎只适用于传统 OOP 上下文中的静态方法,例如用于获取/保存数据的存储库类、用于发出外部请求的服务层等。除非我遗漏了什么,否则模块模式不打算与通常需要传递到服务方法或从服务方法传递到 UI 胶水代码的数据类(想想 DTO)一起使用。
我看到引用的一个共同好处是,您可以使用模块模式在 Javascript 中拥有真正的私有方法和字段,但这也可以通过具有类似于此的“经典”Javascript 风格的静态或实例方法来实现:
myClass = function(param) {
// this is completely public
this.publicProperty = 'Foo';
// this is completely private
var privateProp = param;
// this function can access the private fields
// AND can be called publicly; best of both?
this.someMethod = function() {
return privateProp;
};
// this function is private. FOR INTERNAL USE ONLY
function privateMethod() {
/* ... */
};
}
// this method is static and doesn't require an instance
myClass.staticMethod = function() { /* ... */ };
// this method requires an instance and is the "public API"
myClass.prototype.instanceMethod = function() { /* ... */ };
所以我想我的问题是是什么让模块模式比传统风格更好?它有点干净,但这似乎是唯一立即显而易见的好处;事实上,传统风格似乎提供了提供真正封装的能力(类似于 Java 或 C# 等真正的 OOP 语言),而不是简单地返回仅静态方法的集合。
有什么我想念的吗?