JavaScript では、「クラス」を作成してパブリック関数を与える方法が 2 つあります。
方法 1:
function MyClass() {
var privateInstanceVariable = 'foo';
this.myFunc = function() { alert(privateInstanceVariable ); }
}
方法 2:
function MyClass() { }
MyClass.prototype.myFunc = function() {
alert("I can't use private instance variables. :(");
}
メソッド 2 を使用すると、すべてのインスタンスが関数の同じコピーを共有するため、それぞれが独自の関数を取得するよりも効率的であると言う人を何度も読みました。ただし、プロトタイプを介して関数を定義することには大きな欠点があります。プライベートなインスタンス変数を持つことができなくなります。
理論的には、方法 1 を使用すると、オブジェクトの各インスタンスに関数の独自のコピーが与えられます (したがって、割り当てに必要な時間は言うまでもなく、より多くのメモリが使用されます) - 実際に何が起こるのでしょうか? Web ブラウザーが簡単にできる最適化は、この非常に一般的なパターンを認識し、実際にオブジェクトのすべてのインスタンスがこれらの「コンストラクター関数」を介して定義された関数の同じコピーを参照するようにすることです。その後、後で明示的に変更された場合にのみ、インスタンスに関数の独自のコピーを与えることができます。
両者のパフォーマンスの違いについての洞察、またはさらに良い実世界での経験は、非常に役立ちます。