Насколько я понимаю, рекомендуется использовать версию 2 (см. Ниже), используя прототип. Однако в чем разница между этими двумя версиями, поскольку не только версия 1 иногда превосходит версию 2 в потреблении памяти, она также регулярно завершается с половиной до трети времени (согласно моим тестам с использованием Chrome).Какое создание объекта javascript более эффективно?
Версия 1:
var C = function() { console.log("new C"); }
C.f = function(foo) { console.log("function"); }
var a = [];
for (var i = 0; i < 100000; i++) {
a.push(new C());
}
Версия 2:
var C = function() { console.log("new C"); }
C.prototype.f = function(foo) { console.log("function"); }
var a = [];
for (var i = 0; i < 100000; i++) {
a.push(new C());
}
Возможный дубликат [Закрытие в функциях автоматического выполнения по сравнению с объектами] (http://stackoverflow.com/questions/8231730/closures-in-auto-executing-functions-vs-objects) – Neal
Вы «расширяете» объект ? Или просто создать объект, который будет использоваться? – mawcsco
Ваши сценарии не эквивалентны. В первом случае 'f' является свойством конструкторской функции' C', это означает, что экземпляры, созданные с помощью 'new C()' **, не имеют ссылки на 'f'. Во втором случае вы назначаете 'f'' прототипу 'C', из которого наследуются все экземпляры. Вы сравниваете яблоки с апельсинами. Это не должно влиять на производительность, хотя ... вот тестовый файл jsPerf: http://jsperf.com/static-vs-prototype –