36

これをjsLintで抑える方法を見て試してみたところ、うまくいきませんでした。

「new」キーワードが必要です。そうしないと、スクリプトが機能しません。

.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 に 'new' を使用しないでください

ここで、EsLint を満たすと、アプリは次のようになります。

Uncaught (約束) TypeError: Undefined のプロパティ '_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次のディレクティブを使用して、1 行でルールを抑制することもできます。

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 に答える
0

クラス内で init() メソッドを使用して、より宣言的な形式を使用します。例えば:

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

したがって、そのインスタンスを初期化すると、次のようになります。

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

これにより、「no new」リンターを回避し、リンター コメントのない未定義のグローバルを回避できます。

于 2019-06-12T16:41:11.600 に答える