EsLint - 抑制"不要使用' new'副作用"

时间:2015-10-22 17:30:03

标签: eslint

我看到了用jsLint来抑制它的方法,尝试过它,它没有用。

我需要新的'关键字或我的脚本不起作用。

如何在.eslintrc中压制它?

非常感谢

更新:按照约旦的要求。 [请注意我的应用程序是用ReactJs编写的]

 // 3rd party 
 const AnimateSlideShow = require('../js-animation');

 export default class Animate extends React.Component {

   .......

    fetchJsAnimation() {
      const animation = this.refs.Animation;
      new AnimateSlideShow(animation);
    }
   ......
  }
  

错误:请勿使用' new'没有新的副作用

现在,如果我满足EsLint,我的应用就会崩溃:

  

未捕获(承诺)TypeError:无法设置属性' _handleMouse'未定义的(...)

4 个答案:

答案 0 :(得分:59)

以下是有问题的ESLint规则的文档:http://eslint.org/docs/rules/no-new.html

  

禁止LocalResource localResource = RoleEnvironment.GetLocalResource("DownloadedTemplates") 副作用(SELECT CustId FROM my_table GROUP BY CustId HAVING COUNT(*) = SUM(Ind ='U')

     

new与构造函数一起使用的目的通常是创建特定类型的对象并将该对象存储在变量中,例如:

no-new
     

使用new并不存储结果不常见,例如:

var person = new Person();
     

在这种情况下,创建的对象被抛弃,因为它的引用不存储在任何地方,并且在许多情况下,这意味着构造函数应该替换为不需要new的函数。使用

我粘贴了上述内容,因为我认为了解规则的意图是什么非常重要,而不仅仅是如何让它消失。

如果您无法找到摆脱new的方法,可以使用new Person(); 指令来抑制此错误:

new

ESLint指令是块作用域的,因此它将仅在此函数内被抑制。您还可以使用eslint-disable指令禁止单行上的规则:

fetchJsAnimation() {
  /* eslint-disable no-new */
  const animation = this.refs.Animation;
  new AnimateSlideShow(animation);
}

如果您确实需要为整个项目停用此规则,请在eslint-disable-line的{​​{1}}部分中将此规则的值设置为new AnimateSlideShow(animation); // eslint-disable-line no-new

.eslintrc

您也可以将其设为"rules"0错误),将其设为警告而非错误。

答案 1 :(得分:2)

尝试将您的功能覆盖到anonim功能

(()=>code)();

在你的例子中

fetchJsAnimation() {
  const animation = this.refs.Animation;
  (()=>new AnimateSlideShow(animation))();
}

或者你可以使用这种模式,例如现代的javascript框架。 vuejs vue 这是一个例子

(() => new Vue({ 
    el: '#app', 
    router, 
    store, 
    components: { App }, 
    template: '<App/>' 
}))();

答案 2 :(得分:0)

扩展sarkiroka的答案,这是ES5版本(本质上是带有return语句的IIFE):

(function (Vue) {
  'use strict';

  return new Vue({
    el: '.unity-header-wrapper'
  });
}(Vue));

我们正在避免ESLint未使用的var错误,如果使用这种方式会出现该错误:

var myApp = new Vue({
  el: '.unity-header-wrapper'
});

我们还避免使用独立的“ new Vue()”实例化(这样可以防止ESLint出现副作用错误)

var myApp = new Vue({
  el: '.unity-header-wrapper'
});

您也可以在ESLint配置中将Vue添加为全局变量,以避免未定义的全局var错误,如下所示:Global variables in Javascript and ESLint

// .eslintrc.json
"globals": {
  "Vue": true
}

答案 3 :(得分:0)

我在类中使用init()方法来使用更具声明性的形式。例如:

ttk.Checkbutton

因此,当您初始化该实例时:

self.cb = tk.Checkbutton(self.root, command=self.handle_checkbutton, text="Click me")

有了这个,您就可以避免“没有新的”绒毛,并避免在没有绒毛注释的情况下使用未定义的全局毛绒。