誰かが私にこの質問をして、私はそれに少し戸惑いました。
これは Q&A であるため、ここで質問することは理にかなっています。
関数をオブジェクトに追加するのではなく、オブジェクトのプロトタイプに追加するのはなぜですか?
誰かが私にこの質問をして、私はそれに少し戸惑いました。
これは Q&A であるため、ここで質問することは理にかなっています。
関数をオブジェクトに追加するのではなく、オブジェクトのプロトタイプに追加するのはなぜですか?
プロトタイプに追加すると、オブジェクトのすべての「インスタンス」で使用できるようになるためです。オブジェクト自体に追加すると、その単一のインスタンスでのみ使用可能になります。
次の 2 つのオブジェクトを検討してください。
var myObject1 = function() {
this.myProperty = true;
this.myMethod = function() {
return this.myProperty;
};
}
var myObject2 = function() {
this.myProperty = true;
}
myObject2.prototype.myMethod = function() {
return this.myProperty;
};
これを行うたびに:
var test = new myObject1();
myObject1.myMethod も作成されます。これを行うときは、次のようになります。
var test = new myObject2();
myObject2.myMethod は、プロトタイプ チェーンに追加されているため、再度作成する必要があるというオーバーヘッドはありません。
これはいくつかのインスタンスでは問題になりませんが、たとえばゲームでは数百のインスタンスが存在する可能性があり、これはかなりのパフォーマンス ヒットになる可能性があります。
このnet.tutsplusの記事は、私よりもうまく説明できるかもしれませんhttp://net.tutsplus.com/tutorials/javascript-ajax/prototypes-in-javascript-what-you-need-to-know/