-2

これら2種類の構造の違いは何ですか

var bar = { 
    something : value,
    execute : function() { /* Whatever */ }
}

function foo() {    
    this.something = value;
    this.execute = function() { /* Whatever */ };
}

私の推論は、 bar は静的オブジェクトであり、 foo は、新しいコンストラクターを呼び出して作成する必要がある通常のオブジェクトであるということです

あれは正しいですか ?またはそうではない

4

1 に答える 1

1

bar(あなたが宣言したように)との違いは何ですか?

var bar2 = new foo();

barとの間に大きな違いはありませんがbar2、 のプロトタイプbarは常に のプロトタイプ プロパティでありObject(まるであなたが書いたかのようにvar bar = new Object(); bar.something = value; bar.execute = function() {...})、 のプロトタイプはのプロパティ(またはbyのプロトタイプ プロパティ)bar2に割り当てられたものになります。デフォルト)。prototypefooObject

プロトタイプの問題を除けば、コンストラクター関数の作成は、ほとんどの場合利便性の問題です。

コンストラクター アプローチでは、プロトタイプを使用して利点を得ることができることに注意してください。

function foo() {    
    this.something = value;
}

foo.prototype.execute = function() { /* Whatever */ };

次に、 のすべてのインスタンスが同じ関数をfoo共有します。executeこれは、オブジェクトごとに新しい関数オブジェクトを用意するよりもはるかにスペース効率が良くなりfooます。(もちろん、これらの 1 つだけを作成する場合は、あまり利点はありません。)

于 2013-03-22T16:53:55.870 に答える