12

なぜこれらのエラーが発生するのですか?

行329の文字60の問題:副作用に「new」を使用しないでください。

new widget.StyledDropdown(dojo.byId("sTitle"));

330行目の文字61の問題:副作用に「new」を使用しないでください。

new widget.StyledDropdown(dojo.byId("sSuffix"));

336行目の57文字の問題:副作用に「new」を使用しないでください。

true,{shortenName : true,maxChars : 20});

行338の文字129の問題:副作用に「new」を使用しないでください。

new widget.StyledDropdown(dojo.byId("sCountry"),USPS.Address.countrySw...

4

3 に答える 3

23

新しく作成されたオブジェクトへの参照を保存していません。これはコードの臭いです。

JSLintは、「いくつかのオブジェクトを作成していますが、すぐに破棄します。それを実行できる唯一の理由は、オブジェクトを作成するという行為に副作用があるということです。これは奇妙なことです。」

コンストラクターに副作用が発生しないようにするか(たとえば、コードを通常の関数に移動するなど、コンストラクターが実行していることを実行する他の方法を見つけることを意味します)、または新しく作成された-への参照を格納することで、警告を失う可能性があります。作成されたオブジェクト(破棄する一時的なローカル変数でも)。

于 2010-09-10T16:10:08.230 に答える
2

戦略を再考するのが最善ですが、多くの場合、開発サイクル中に技術的負債を処理することはできません。

JSHintを使用している場合は、ケースバイケースでこのオプションをオーバーライドできます。問題のあるコードのスコープにこのjshintコメントを追加します。

/* jshint -W031 */
new widget.StyledDropdown(dojo.byId("sTitle"));
new widget.StyledDropdown(dojo.byId("sSuffix"));
...

インライン構成は関数スコープです。したがって、コメントの範囲外のものは引き続きチェックされます。

于 2016-10-12T16:25:40.413 に答える
0

私は次の解決策を使用します。newキーワードの使用とESLintのオーバーライドに依存していますが、そのオーバーライドは、クラスを含むファイルにスコープダウンされています。

重要なのは、クラスがプライベートであり、エクスポートされるのはプレーン関数であるということです。次に、コードで関数を使用すると、それがクラスではなく、単なる通常の関数であることは明らかです。

このようにして、新しいコードの臭いを追加せずにクラス構文を引き続き使用できます。

class SideEffects {
  constructor() {
  
  }
  // ...
}

export function addSideEffects() {
  // eslint-disable-next-line no-new
  new SideEffects();
}
于 2021-12-08T07:39:20.417 に答える