При создании функций требуется больше памяти

// Case A
function Constructor() {
  this.foo = function() {
    ...
  };
  ...
}

// vs 
// Case B
function Constructor() {
  ...
};

Constructor.prototype.foo = function() {
  ...
}

Одной из основных причин, по которой люди рекомендуют использовать прототипы, является то, что .foo создается один раз в случае прототипа, где as this.foo создается несколько раз при использовании другого подхода.

Однако можно было бы ожидать, что интерпретаторы могут это оптимизировать. Так что есть только одна копия функции foo в случае A.

Конечно, у вас все еще будет уникальный контекст области видимости для каждого объекта из-за замыканий, но это меньше накладных расходов, чем новая функция для каждый объект.

Оптимизируют ли современные интерпретаторы JS случай А, чтобы была только одна копия функции foo ?

7
задан Raynos 16 September 2011 в 23:16
поделиться