2017-05-05 10 views
0

あなたは、このようなコンストラクタ関数にメソッドを作成します。JavaScriptのメソッドやコピー

var Something = function() { 
    this.doSomething = function() {/* do something here */}; 
}; 

JavascriptがあなたがSomethingコンストラクタ関数で新しいオブジェクトを作成するたびにdoSomethingのコピーを作成します。
しかし、あなたはこのようにそれを行うとき:

var Something = function() { 

}; 
Something.prototype.doSomething = function() {/* Do something here */}; 

javascriptのはまだあなたがSomethingコンストラクタ関数を使用してオブジェクトを作成するたびにdoSomethingのコピーを作成する場合、または各オブジェクト内doSomethingは、効率のために同じものを指しありません?

答えて

2

あなただけで簡単に実行し、これを自分でテストすることができます。

var a = new Something(); 
var b = new Something(); 
console.log(a.doSomething === b.doSomething); 

場合trueを印刷する必要があり、あなたがにconsole.logをプロトタイプにメソッドを定義しているとき。

とにかくすべてのものJavaScript私はほとんどすべての主題については、非常に良い紹介を提供するので、私はMDNを参照することをお勧めします。 CSSとHTMLも。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Inheritance_and_the_prototype_chain

0

prototypeがオブジェクトであり、そのようなものが参照されると、それにメソッドを追加すると、あなたはすべてのインスタンスで共有する方法で、メモリ内の1箇所のみを持つことができるようである理由、それは好ましい方法ですメソッドを宣言する。

function Something(){ 
    //as many spot in memory as the number of instances 
this.doSomething = function(){ 

} 
}; 

//only one spot in memory 
Something.prototype.doSomething = function(){ 

}