Немного ООП!
Иногда не могу определиться какую нотацию использовать.
Так вот хочу спросить есть ли те кто подобное препарировал и может дать заключение по ниже приведенным примерам кода (относительно производительности, безопасности и прочим факторам) 1. var object = function(){ this.method = function(a){ return a*a; }; }; alert(new object().method(2)); 2. var object = function(){}; object.prototype.method = function(a){ return a*a; }; alert(new object().method(2)); 3. var object = new function(){ var method = { method : function(a){ return a*a; } }; return method; }; alert(object.method(2)); 4. не продакшн (просто ради примера объекта с двумя контекстами) var object = (function(){ this.method = function(a){ return a*a; }; return this; })(); alert(object.method(2)); 5. var object = new function(){ this.method = function(a){ return a*a; }; return this; }; alert(object.method(2)); Можно дополнить своими вариантами |
Очевидно, что при использовании прототипа тратится меньше памяти (При количестве экземпляров > 1, конечно). Ну и, возможно, конструктор работает дольше.
Но в этом случае не получится реализовать приватные поля, т.к. они обычно реализуются замыканиями (разве что определить публичные getter + setter). А вообще, все эти отличия в плане клибоайтов затрат памяти и наносекунд времени не играют особой роли. Выбирайте тот способ, который удобнее Вам. |
1 vs 2 обмусолено не раз, лучше прототип, как сказал уже B@rmaley.e><e.
3 и 5 по сути ничем не отличаются -- фабрика объектов. Иногда нужна, но редко. В 4 this будет равен window, т.е. семантически неверно. |
Отличный вопрос для собеседования, кстати :)
|
Часовой пояс GMT +3, время: 17:15. |