-1

多くのインスタンスを持つオブジェクトを作成したい。これら2つの方法でそれを行うことの違いは何ですか?

function anObject(foo,bar){
   this.foo = bar;
   yada yada
};

この

var anObject = function(foo, bar){
   var foo;
   var bar;
   this.something = function...
}
4

1 に答える 1

0

多数のオブジェクトが予想される場合は、クロージャー パターン (2 番目の例) よりもオブジェクト コンストラクター パターン (最初の例) を強くお勧めします。コンストラクター パターンは、1 つのオブジェクト (foo プロパティを持つオブジェクト) のみを作成します。メソッドが必要な場合は、メソッドをコンストラクター プロトタイプに追加します。

anObject.prototype.something = function () {
    // do something
}

コンストラクター パターンを使用すると、少なくとも 3 つのオブジェクトが割り当てられます。たとえば、

function anObject(foo, bar) {
    this.something = function () {
        // do something
    };
}

これにより、密結合された 3 つのオブジェクトが作成されます。呼び出されたプロパティを含むオブジェクトを作成し、 が呼び出さsomethingれたときに作成された新しい関数オブジェクトを格納し、3 番目に、とanObjectを含む関数環境を作成します。このフォームには、保持され、他のものからアクセスできないという利点があります。foobarfoobarsomethingただし、2 つの追加の割り当てが必要であり、コンストラクター パターンよりも約 3 倍のコストがかかりますが、最新のエンジンの最適化により、マイレージは異なる場合があります。関数を追加すると割り当てが悪化し、関数ごとに割り当てが 1 つ追加されます。コンストラクター パターンを使用すると、メソッドの割り当てはプロトタイプ チェーンを介して各オブジェクトで共有され、メモリ効率が大幅に向上します。

于 2013-02-26T09:06:06.750 に答える