36

我看到了用 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);
    }
   ......
  }

错误:不要将“新”用于副作用 no-new

现在,如果我满足 EsLint,我的应用程序就会出错:

未捕获(承诺中)类型错误:无法设置未定义(…)的属性“_handleMouse”

4

4 回答 4

72

这是相关 ESLint 规则的文档:http ://eslint.org/docs/rules/no-new.html

禁止new副作用 ( no-new)

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

var person = new Person();

使用new而不存储结果的情况不太常见,例如:

new Person();

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

我把它贴在上面是因为我认为理解规则的意图很重要,而不仅仅是如何让它消失。

如果您找不到摆脱 的方法new,可以使用eslint-disable指令抑制此错误:

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

ESLint 指令是块作用域的,所以它只会在这个函数内部被抑制。eslint-disable-line您还可以使用指令在单行中禁止规则:

new AnimateSlideShow(animation); // eslint-disable-line no-new

如果您确实需要为整个项目禁用此规则,则在您.eslintrc"rules"部分中将此规则的值设置为0

{
  // ...
  "rules": {
    "no-new": 0,
    // ...
  }
}

1您还可以通过将其设置为( 2is error)来使其成为警告而不是错误。

于 2015-10-22T17:50:50.757 回答
10

尝试将您的功能覆盖到匿名功能中

(()=>code)();

在你的例子中

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

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

(() => new Vue({ 
    el: '#app', 
    router, 
    store, 
    components: { App }, 
    template: '<App/>' 
}))();
于 2018-02-16T19:46:23.007 回答
2

扩展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 添加为全局变量,以避免未定义的全局变量错误,如下所示:Javascript 和 ESLint 中的全局变量

// .eslintrc.json
"globals": {
  "Vue": true
}
于 2018-12-13T12:46:11.910 回答
0

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

class Example {
  constructor () { ... }
  init () { //this method is using for initialize the instance }
}

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

const example = new Example()
example.init()

有了这个,你可以避免“没有新”的 linter 并避免没有 linter 注释的未定义全局。

于 2019-06-12T16:41:11.600 回答