通常我在代码中使用类似于设计模式定制对象的东西。
但是JSLint不赞成使用这样的结构:
function MyClass() { this.init(); }
new MyClass(data);
由于对象在创建后立即被丢弃 - 它没有被用于任何事情上。 我们可以通过将其赋值给一个变量来骗过JSLint,但这并不改变JSLint(以及我猜许多JavaScript爱好者)不鼓励此模式。
那么为什么在JavaScript构造函数中使用副作用被视为不良实践呢?
就我所知,我认为这是一种好的实践,因为:
- 你只有一个设置函数,因此如果你要管理一个MyClass实例列表以供稍后访问,维护应该更容易。(将对象推入数组是一种副作用,你必须在构造函数返回后才能这样做才能符合“良好实践” = 更难维护。)
- 它有自己的原型,因此拥有"类所有权":Firebug将其报告为MyClass的一个实例而不仅仅是Object。(在我看来,这使它优于其他设计模式。)
new MyClass
,因为在实例化后你并没有使用它。因此,它只被用于其副作用。相反,这个例子可以重写以利用依赖注入,如initialize(new MyClass());
(尽管这个例子太简单了,有点傻)。 - zzzzBovMyClass
实例分配给任何东西吗(换句话说,这是一种使init()
成为一种静态方法的复杂方式吗)?“正常”使用此模式不会触发 JSLint 警告。 - Frédéric Hamidi