10

我通常在我的代码中使用与设计模式自定义对象非常相似的东西。

但是 JSLint 不赞成这样的结构:

function MyClass() { this.init(); }
new MyClass(data);

因为对象在创建后立即被丢弃 - 它没有被用于任何事情。我们可以通过将它分配给一个变量来欺骗 JSLint 忽略它,但这并没有改变 JSLint(我猜很多 JavaScript 爱好者)不鼓励这种模式。

那么为什么在 JavaScript 构造函数中使用副作用被视为一种不好的做法呢?

对于它的价值,我认为这是一个很好的做法,因为:

  1. 您有一个设置功能,因此如果您正在管理 MyClass 实例列表以供以后访问,它应该更容易维护。(将对象推入数组是一种副作用,您必须在构造函数返回“良好实践”= 更难维护之后再执行此操作。)
  2. 它有自己的原型,因此是“类所有权”:Firebug 将其报告为 MyClass 的实例,而不仅仅是 Object。(在我看来,这使它优于其他设计模式。)
4

1 回答 1

10

罗伯特·马丁在他的《清洁代码》一书中说

副作用是谎言。你的函数承诺做一件事,但它也做其他隐藏的事情……它们是狡猾的和破坏性的错误,通常会导致奇怪的时间耦合和顺序依赖。

您在关于数组的评论中描述的内容听起来像是“奇怪的时间耦合”。

于 2013-02-04T21:21:21.827 回答