【问题标题】:Explanation for the "nonew" rule in JSHintJSHint 中“nonew”规则的解释
【发布时间】:2014-06-26 15:07:23
【问题描述】:

JSHint 中有一个我从未清楚理解的规则/选项:nonew 规则:

此选项禁止使用构造函数 副作用。有些人喜欢在没有的情况下调用构造函数 将其结果分配给任何变量:

new MyConstructor();

这种方法没有任何优势 只需调用 MyConstructor,因为操作员 new 的对象 created 不在任何地方使用,因此您通常应避免使用构造函数 喜欢这个。

以下是我不明白的地方:

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

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

  • 说没有new 调用MyConstructor() 没有优势是什么意思?显然这不会按预期创建对象。


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

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

(function (Module) {

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

})(Module);

【问题讨论】:

  • 1.被认为容易出错的副作用。 2. 如果你不打算使用新创建的对象,为什么需要调用构造函数?如果答案是“副作用”,请参见 1。

标签: javascript jslint jshint


【解决方案1】:

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

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

说没有 new 调用 MyConstructor() 没有优势是什么意思?显然这不会按预期创建对象。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-11
    • 2010-09-15
    • 2020-10-20
    • 2013-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多