2016-12-20 2 views
-5

javascriptのプロトタイプをいつどのように/いつ使用するのかよくわかりません。私は、プロパティを割り当てるこれら二つの方法の違いを理解する:javascriptオブジェクトにインスタンスではなく静的プロパティを作成するのは適切なのはいつですか?

静的プロパティを

var Date = function() {}; 
Date.setTime = function (key) { 
}; 
Date.updateTime = function (key, value) { 
}; 

のsetTimeとupdateTime直接日付オブジェクトに追加のプロパティです。

インスタンスのプロトタイプ

var Date = function() {}; 
Date.prototype.setTime = function (key) { 
}; 
Date.prototype.updateTime = function (key, value) { 
}; 

のsetTimeにプロパティを割り当てるとupdateTimeは、日付のインスタンスが継承するプロパティを定義しています。

私の質問インスタンス/プロトタイプまたはオブジェクト(静的変数)にプロパティを割り当てる必要があるときは、どのように知っていますか?変数をオブジェクトに直接割り当てるのはいつ決めるべきですか?すべてのインスタンスで変数を使用できるようにするのはいつですか?

+1

まあ 'Date.now()' Date.prototype.getFullYearは() ''そうではない、任意の特定の既存のDateインスタンスへの参照せずに理にかなっているようなもの。それはあなたが求めていることですか? – Pointy

+0

@Pointy私の質問は、オブジェクトに直接変数を割り当て、すべてのインスタンスで変数を使用できるようにすることです。 –

+0

この関数が特定のインスタンスと何も関係しない場合は、コンストラクタ自体に行くことができます。インスタンスが関与している(例えば、コード内で 'this.something 'を参照しなければならないような)ときに関数が意味をなさないのであれば、**はプロトタイプ上にあり、インスタンスに利用可能です**。 – Pointy

答えて

2

オブジェクトで何をしたいのかに完全に依存します。オブジェクトのインスタンスで独自のプロパティを持つメソッドを使用できるようにするには、プロトタイプにメソッドが必要です。それ以外の場合、クラスに任意の状態を保持させたくないユーティリティクラスを作成する場合は、おそらく静的メソッドを追加するだけです。

基本的に、オブジェクトのインスタンスがメソッドで独自の状態を使用できるようにするには、プロトタイプにメソッドを設定します。

var MyObj = function(prop) { 
 
    this.myProp = prop; 
 
} 
 
MyObj.static = function() { 
 
    console.log('This is static ' + this.myProp); 
 
} 
 
MyObj.prototype.dynamic = function() { 
 
    console.log('This is dynamic ' + this.myProp); 
 
} 
 

 
var myInstance = new MyObj('wow!'); 
 

 
MyObj.static(); // 'This is static undefined' 
 
// MyObj.dynamic(); // Not a function 
 

 
// myInstance.static(); // Not a function either 
 
myInstance.dynamic(); // 'This is dynamic wow!'

+0

ありがとうございました。私はその違いを理解していますが、私は新しいので、これを自分のコードに実装するのは難しいです。 –

関連する問題