2016-01-28 10 views
7

私はオブジェクトを作成するためにさまざまな方法で私の頭を包み込みようとしています。コンストラクタパターンとプロトタイプパターンの違い

私はオブジェクトを作成するためにProtoypeパターンを使いました。

今、私は以下の2つの機能を書いていますが、どちらの機能的な違いがあるのか​​分かりません。いつコンストラクタパターンを使用し、Prototypeパターンをいつ使用しますか?

コンストラクタパターン

function Fruit(){} 
Fruit.color = "Yellow", 
Fruit.fruitName = "Banana", 
Fruit.nativeTo = "SomeValue" 

Prototypeパターン

function Fruit(){} 
Fruit.prototype.color = "Yellow", 
Fruit.prototype.fruitName = "Banana", 
Fruit.prototype.nativeTo = "SomeValue" 
+1

同じコンストラクタから作成されたオブジェクトためにすぐに利用可能である私は、最大の違いの一つは、そのすべてのメソッドとプロパティでフルーツの新しいインスタンスを作成する機能だと思いますPrototypeパターンを使用します。あなたのコンストラクタの例では、:var x = new Fruit()のようなFruitの新しいオブジェクトを作成し、x.colorのようなプロパティにアクセスしようとすると、プロトタイプで同じことをしている間に未定義になります。 " – gothical

答えて

12

コンポーネントの再利用性...

コンストラクタ

新しいコンストラクタを作成すると、すべてのインスタンスが新たに作成されます。重要なことに、インスタンスに加えられた変更は、それらにのみ影響し、他のものには影響しません。プロトタイプ

あなたはそれが皆に影響を与えますロジックとプロトタイプチェーンへの変更を再利用しますプロトタイプを使用して新しいオブジェクトを作成

。 - 非常にあいまいな答えが、-レス決して状況Javascript prototypes and instance creation

各パターンを使用する必要性に基づいている:

これは素敵な説明です。

オブジェクト、ファンクション、配列を考えてください。それらはJS全体で使用されており、プロトタイプチェーン上に生きていくために、私たちが伝えたいと思っている変化としては意味があります。彼らの行動を台無しにすることができるので、これらを変更することはありません。

ここ

ベスト説明:プロトタイプのプロパティでJavaScript constructors, prototypes, and the new keyword

+1

私の質問に答える時間をとってくれてありがとう。最後のリンクは本当に有望です。病気は腹を立ててそれを見てください! –

+0

@MarcoGeertsma - 私の喜び! –

1

変更が既に、存在を含め、すべてのインスタンスに適用される場所コンストラクタによって作成されたプロパティの変更は、インスタンスのみ

2

のためにそれを変更されますようコンストラクタ

基本的にコンストラクタを使用して、new演算子を持つオブジェクトを作成します。

これは、コンストラクタのインスタンスプロパティを初期化するために使用されます。したがって、newを持つコンストラクタは、C++やJAVAのようなオブジェクト指向言語のクラスの実装だけです。

すべてのコンストラクタには、コンストラクタへの参照を保持するプロパティprototypeがあります。

プロトタイプ

JavaScriptはクラスベースの継承を欠いています。

inheritanceを実装するJavaScriptでは、単一レベルの継承を実装するために使用されたPrototypeを使用しました。

JavaScriptではコードの再利用性を実現するためにプロトタイプが使用されています。これはプロトタイプの継承に過ぎません。プロトタイプ継承、メソッドやプロパティで

はプロトタイプに追加