3

いくつかのソースコードを見ていると、私はこれを見つけました:

require["./helpers"] = new function() {...};

なぜnewここで使われているのですか?これをJSLintで実行すると、

Weird construction. Delete 'new'.

それで、これは単なるスタイル、個人的な好みの形ですか?それとも、この背後に何かありますか?

4

2 に答える 2

6

これは、作成中に使用できるオブジェクトを作成する方法ですthis

これにより、インスタンス化中に、オブジェクト リテラル構文では許可されないオブジェクトへの直接参照が提供されます。

var o = new function() {
    this.num = Math.random();
    this.isLow = this.num < .5; // you couldn't reference num with literal syntax
};

オブジェクト リテラル バージョンは、次のようにする必要があります。

var o = {
    num: Math.random()
};
o.isLow = o.num < .5;

したがって、匿名関数は基本的に一時的なコンストラクターとして使用されます。名前付きコンストラクター関数を簡単に使用することもできますが、コンストラクターはあまり気にしないので、「使い捨て」のコンストラクターを使用します。

もちろん、これは関数であるため、ローカル変数のスコープが作成されるため、新しいオブジェクトに関数を割り当てると、ローカル変数を閉じることができます。

于 2012-10-02T01:13:45.647 に答える
0

これは基本的に、構築中に本当にそして必死に使用したい人を除いて、ある種のパブリックインターフェイス(関数のプライベートスコープにアクセスできるパブリックプロパティ/メソッドを持つオブジェクト)を返すIIFEと同じことをしています、、またはthisを使用するのに煩わされることはありません。または、通常のインラインオブジェクトをフラットアウトして返します。callbindapply

内部的には、IIFEとコンストラクター関数の両方が予想される方法で使用される場合、いくつかの違いがあります... ...しかし、この場合、どちらの方法でも最終的な戻り値について本質的に違いはありません。高レベルから(つまり、プログラムに関する限り)。

于 2012-10-02T01:28:00.597 に答える