10

通常、コードではデザイン パターンのカスタム オブジェクトに非常によく似たものを使用します。

しかし、JSLint は次のような構造に眉をひそめます。

function MyClass() { this.init(); }
new MyClass(data);

オブジェクトは作成直後に破棄されているため、何にも使用されていません。これを変数に代入することで、JSLint をだましてこれを無視させることはできますが、JSLint (そして多くの JavaScript 愛好家はそう推測しています) がこのパターンを思いとどまらせていることに変わりはありません。

では、JavaScript コンストラクターで副作用を使用することが悪い習慣と見なされるのはなぜでしょうか?

それだけの価値があるため、これは良い習慣だと思いました。

  1. セットアップ関数は 1 つしかないため、後でアクセスするために MyClass インスタンスのリストを管理している場合など、保守が容易になります。(オブジェクトを配列にプッシュすることは副作用です。コンストラクターが「良い習慣」に戻った後にそれを行う必要があります=維持するのが難しくなります。)
  2. これには独自のプロトタイプがあるため、「クラスの所有権」があります。Firebug は、これを単なる Object ではなく MyClass のインスタンスとして報告します。(これは、私の意見では、他の設計パターンよりも優れています。)
4

1 に答える 1

10

著書Clean Codeの中で Robert Martin は次のように述べています。

副作用は嘘です。あなたの関数は1つのことを約束しますが、他の隠されたことも行います...それらは、しばしば奇妙な一時的な結合と順序の依存関係をもたらす、よこしまで有害な誤解です。

配列に関するコメントで説明したことは、「奇妙な時間的結合」のように聞こえます。

于 2013-02-04T21:21:21.827 に答える