Немного ООП!
Иногда не могу определиться какую нотацию использовать.
Так вот хочу спросить есть ли те кто подобное препарировал и может дать заключение по ниже приведенным примерам кода (относительно производительности, безопасности и прочим факторам) 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, время: 14:37. |