" nonew"的解释JSHint中的规则

时间:2014-06-26 15:07:24

标签: javascript jslint jshint

JSHint中有一条我从未明确理解的规则/选项:nonew规则:

  

此选项禁止使用构造函数   副作用。有些人喜欢不用调用构造函数   将结果分配给任何变量:

     

new MyConstructor();

     

这种方法没有优势   简单地调用MyConstructor,因为运算符是new的对象   创建不会在任何地方使用,因此您通常应该避免构造函数   喜欢这个。

这是我不明白的地方:

  • 调用对象构造函数会产生“副作用”的示例是什么?

  • 如果您不需要将实例作为变量引用,那么调用对象构造函数的正确方法是什么?

  • 在没有MyConstructor()的情况下调用new没有任何好处?显然,这不会按预期创建对象。


为了帮助引出有用的响应,在调用构造函数后不再需要引用实例时,如何重构下面的代码来实例化对象?

var Module = require('./module');

(function (Module) {

  new Module({
    el: '#module',
    tpl: '#tpl-module',
    status: false
  });

})(Module);

1 个答案:

答案 0 :(得分:0)

  

如果您不需要将实例作为变量引用,那么调用对象构造函数的正确方法是什么?

如果您不需要实例,请不要调用构造函数。

  

什么意思是说没有新功能调用MyConstructor()没有优势?显然,它不会按预期创建一个对象。

如果调用的目的是执行副作用,则不需要创建对象。如果需要,你应该使用普通函数(我很想称之为"过程"),而不是构造函数。

如果构造函数确实使用了实例(并将其绑定到某处),这被认为是一种不好的做法。构造函数应该只创建和初始化对象。其他一切都应该以单独的方法完成。