// Case A
function Constructor() {
this.foo = function() {
...
};
...
}
// vs
// Case B
function Constructor() {
...
};
Constructor.prototype.foo = function() {
...
}
Одной из основных причин, по которой люди рекомендуют использовать прототипы, является то, что .foo
создается один раз в случае прототипа, где as this.foo
создается несколько раз при использовании другого подхода.
Однако можно было бы ожидать, что интерпретаторы могут это оптимизировать. Так что есть только одна копия функции foo
в случае A.
Конечно, у вас все еще будет уникальный контекст области видимости для каждого объекта из-за замыканий, но это меньше накладных расходов, чем новая функция для каждый объект.
Оптимизируют ли современные интерпретаторы JS случай А, чтобы была только одна копия функции foo
?