函数作用域提供了JavaScript中的唯一保密性。
因此,规范的:
function Ctor(dep1, dep2) {
this._dep1 = dep1;
this._dep2 = dep2;
}
Ctor.prototype.foo = function() {
// use this._dep1/2...
}
...是有问题的,因为它没有为注入(inject)的依赖项提供任何封装。
提供真正封装的替代方法(尽管
foo
的位置略有不同)可能是:function factory(dep1, dep2) {
return {
foo: partial(foo, dep1, dep2), // or use bind (partial could be a library fn for partial application)
};
}
function foo(dep1, dep2) {
// use dep1/2
}
但是我很少看到这种模式。是否有充分的理由不使用后者?
最佳答案
您已经陈述了第二种模式的优点。缺点是: