2011-06-27 7 views
1

私は、クロージャとのjsオブジェクトを作成するために、これら二つのアプローチを見て、しかし、任意の利点は、他の上で一つのアプローチを使用するためにあったかどうかわからなかったしました:Closure Object Creation:これらの2つのアプローチのメリットとデメリットは何ですか?

1)新しい

var myObject = new function() { 

    // ... 

    this.foo = 'bar'; 
}; 

2を使用して。)を使用して、自己実行匿名

var myObject = (function() { 

    // ... 

    return { 
     foo: 'bar' 
    }; 
}()); 

私はアプローチ1 thisを割り当てる必要のためにいくつかのオーバーヘッドを持っていることについて、いくつかを読んだが、私はその主張は、アプローチ2のようなものと比較されていたかどうかわからなかった、または返されない自己実行型の無名関数と比較して。

個人的に私は最初の構文がより保守的に見えますが、それは単に個人的な好みかもしれません。

答えて

1

私はさらにいくつかの検索をやってしまったとインスタンスのいくつかの方法を比較する方法に沿って、このどこかに出くわした:

http://jsperf.com/new-vs-literal/4

new function() {};パターンを使用しているようだ知って著しく遅い

1

最初のステートメントは、コンストラクターを一度使用することができ、2番目のインスタンスはオブジェクトリテラルを配信するため、完全な本物のObjectインスタンスを提供します。この場合、私はそれほど大きな違いは見られません。どちらも「一回のインスタンスパターン」と呼ぶことができます。私のエディタ(KomodoEdit 6.1)がIntellisenseを使うことができるのは、myObjectを認識し、そのプロパティを知っているということだけです。 (あなたは匿名関数に名前を付ける場合)たぶん、最初のパターンの別の利点は、それのためのプロトタイプのメソッドを定義することは可能だと考えられます。

var myObject = new function myObj() { 
    this.foo = 'bar'; 
    myObj.prototype.getFoo = function() { return this.foo; } 
    myObj.prototype.setFoo = function(v){ this.foo = v || this.foo; return this; } 
}; 

が、それはすべてのブラウザで動作しない場合があります。

+0

+1良いですインテリセンスのサポートについて、私は第2のパターンVS2010を使用している間気づいてきましたが、プロパティを非常にうまく認識していないようです。 –

関連する問題