// Case A
function Constructor() {
this.foo = function() {
...
};
...
}
// vs
// Case B
function Constructor() {
...
};
Constructor.prototype.foo = function() {
...
}
人々がプロトタイプの使用を勧める主な理由の 1 つは、.foo
プロトタイプの場合は 1 回作成されるのthis.foo
に対し、他のアプローチを使用する場合は複数回作成されることです。
ただし、インタープリターがこれを最適化できることが期待されます。foo
そのため、ケース Aでは関数のコピーが 1 つだけになります。
もちろん、クロージャーのために各オブジェクトに一意のスコープ コンテキストが引き続き存在しますが、各オブジェクトの新しい関数よりもオーバーヘッドが少なくなります。
最新の JS インタープリターはケース A を最適化して、関数のコピーが 1 つだけになるようにしますfoo
か?