2012-02-06 5 views
0

ほとんどのjavascriptフレームワークでは、プロトタイプを持つコンストラクタやコンストラクタの代わりにオブジェクトリテラルを使用するのはなぜですか?プロトタイプを持つコンストラクタに対するオブジェクトリテラルの使用ほとんどのJavaScriptフレームワークでオブジェクトリテラルが使用されている理由

+2

これは2つの全く異なるものです...コード例によっては、あなたの意図を明確にするかもしれません。 – jondavidjohn

答えて

1

すべては、作成しているプログラムの必要性とコードベースを維持する方法によって異なります。

共有プロパティとメソッドを使用して多くのインスタンスを生成するオブジェクトがある場合、コンストラクタを使用してそのプロトタイプを埋める方が効率的です。

コードが多かれ少なかれシングルトンである場合、おそらくオブジェクトを作成していくつかの方法でそれを入力するほうが効率的です。あなたが出てhttp://addyosmani.com/resources/essentialjsdesignpatterns/book/

チェックできる「パターン」と彼らがあなたに意味することができますについての詳細をご希望の場合は、通常の(e - )が本を好きなら

または私が推薦するhttp://shop.oreilly.com/product/9780596806767.do

+0

プロトタイプアプローチを使用するフレームワークはありますか? –

+0

プロトタイプアプローチを利用するフレームワークがいくつかあります。私の頭の中で最初に飛び出すのは、(プロトタイプではない) "プロトタイプ"です。 – PM5544

1

jQueryが自動的にjQuery/$オブジェクトをどのように定義するのかというと思いますか?簡単な答え...それは簡単な方法です。 1ページに次の2行を含めなければならない場合、jQueryが新しいユーザーにとってどのように混乱するか想像できますか?

var jQuery = new jQuery(); 
var $ = jQuery; 
+0

しかし、もしこのコードがjQueryの中にあれば? –

1

私はあなたがnew Object()new Array()[]{}を使用して話をしていると思います。

リテラルバージョンは、多くの場合、高速です(もちろん、これはブラウザによって異なります)。また、配列内のオブジェクトまたはプロパティのプロパティをオンセットから定義できるという追加の利点も得られます。これにより、コードは軽量で読みやすくなります。

var o = { 
    a: 1, 
    b: 2, 
    c: 3, 
    d: 4 
}; 
// vs. 
var o = new Object(); 
o.a = 1; 
o.b = 2; 
o.c = 3; 
o.d = 4; 

var a = [1, 2, 3, 4, 5]; 
// vs. 
var a = new Array(); 
a.push(1, 2, 3, 4, 5); 

編集:私はobjectsarraysのための性能試験を行いました。私にとって、オブジェクトリテラルは実際にはChromeで少し遅くなりました。しかし、配列リテラルははるかに高速でした。ただし、構文はまだ推奨されています。

0

しかし、オブジェクトを数回インスタンス化した場合、プロトタイプはすべてのメソッドでオブジェクト全体を再作成していないため、メモリ使用量が少なくなります。

プロトタイプは、その場で新しいメソッドを作成し、そのオブジェクトのすべてのインテンスを使用できるので、いいです。構文的には醜いので、私はオブジェクトリテラルを好む。しかし、あなたが大規模なアプリケーションを構築している場合、パフォーマンスが大きな問題である場合、プロトタイプはおそらく前方にない方法ですか?

関連する問題