Будет ли создание функции внутри функции-конструктора использовать больше памяти, чем обращение к функции-прототипу?

Возможный дубликат:
JavaScript: установка методов через объект-прототип или конструктор, разница?

Я предполагаю, что на самом деле это вопрос о том, как браузеры реализовали закрытие. Я знаю о многочисленных способах эмуляции классовой функциональности в JavaScript, в том числе с использованием различных библиотек. Это больше вопрос о ресурсах.

Создает ли функция таким образом новую копию public_function функции каждый раз, когда она вызывается? основной вопрос: используется ли при этом больше оперативной памяти, чем добавление функции в MyObject.prototype?

function MyObject(){
  this.public_function = function(){
    //... do something
  }
}

person Daniel Beardsley    schedule 26.06.2010    source источник
comment
См .: stackoverflow.com/questions/422476/   -  person Shog9    schedule 26.06.2010
comment
Кто-нибудь, пожалуйста, отметьте это как обман одного из приведенных ниже связанных вопросов, может быть, этот: stackoverflow.com/questions/80802/   -  person Daniel Beardsley    schedule 26.06.2010


Ответы (2)


да.

По крайней мере, для этого требуется слот для каждого объекта, созданного new MyObject(), а не один слот на прототипе.

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

Действительно ли это имеет значение, будет зависеть от того, сколько объектов вы создаете ...

Смотрите также:

person Community    schedule 26.06.2010

Для класса, который имеет несколько экземпляров, анонимная функция, определенная в конструкторе, создаст новую копию функции для каждого экземпляра.

Другой способ без использования прототипа - определить статическую функцию и назначить ее члену. Например:

function A(){
    this.hello = Hello;
}

function Hello(){
    alert('hello');
}
person Cauly    schedule 26.06.2010