2012-01-28 21 views
2

を追加し、私はこのAddXようにそれの内側にそれを書く:Javascriptのオブジェクトに機能を追加する機能

function Foo() 
{ 
    this.x = 1; 

    this.AddX = function(y) 
    { 
     this.x += y; 
    } 

} 

しかし、私は他の方法がprototypeを使用することができることが分かった:

function Foo() 
{ 
    this.x = 1; 
} 

Foo.prototype.AddX = function(y) 
{ 
    this.x += y; 
} 

使用:

obj = new Foo; 
obj.AddX(5); 
alert(obj.x); 

結果は同じです。どちらのルートが最善か、どちらのルートに違いがありますか?パフォーマンス上の問題はありますか?

答えて

3

最初のアプローチでは、addXがインスタンスメソッドです。したがって、Fooのそれぞれのインスタンスは、addXという独自のコピーを持ちます。

第2のアプローチでは、addXprototypeに追加され、各インスタンスのFooは同じプリプロタイプを共有します。

したがって、2番目の方法は、より多くのメモリを節約します。多数のインスタンスを作成する場合は、2番目の方法を使用することをお勧めします。

+0

いずれにしても、2番目のアプローチは、多数のインスタンスだけでなく、正しいものです。 – gdoron

1

プロトタイプは、関数のすべてのインスタンスに反映されるフィーチャを追加するために使用されます。例えば

:あなたの例では

//First, create the custom object "circle" 
function circle(){ 
} 
circle.prototype.pi=3.14159 

Taken from here

1

そこにそれら の両方の間に違いはありませんが、あなたは日のようなオブジェクトに組み込まれたJavaScriptに機能を追加するために、prototypeプロパティを使用することができ、文字列など...

関連する問題