我通常在我的代码中使用与设计模式自定义对象非常相似的东西。
但是 JSLint 不赞成这样的结构:
function MyClass() { this.init(); }
new MyClass(data);
因为对象在创建后立即被丢弃 - 它没有被用于任何事情。我们可以通过将它分配给一个变量来欺骗 JSLint 忽略它,但这并没有改变 JSLint(我猜很多 JavaScript 爱好者)不鼓励这种模式。
那么为什么在 JavaScript 构造函数中使用副作用被视为一种不好的做法呢?
对于它的价值,我认为这是一个很好的做法,因为:
- 您有一个设置功能,因此如果您正在管理 MyClass 实例列表以供以后访问,它应该更容易维护。(将对象推入数组是一种副作用,您必须在构造函数返回“良好实践”= 更难维护之后再执行此操作。)
- 它有自己的原型,因此是“类所有权”:Firebug 将其报告为 MyClass 的实例,而不仅仅是 Object。(在我看来,这使它优于其他设计模式。)