Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Немного ООП! (https://javascript.ru/forum/misc/12657-nemnogo-oop.html)

monolithed 27.10.2010 22:33

Немного ООП!
 
Иногда не могу определиться какую нотацию использовать.
Так вот хочу спросить есть ли те кто подобное препарировал и может дать заключение по ниже приведенным примерам кода (относительно производительности, безопасности и прочим факторам)

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));


Можно дополнить своими вариантами

B@rmaley.e><e 27.10.2010 22:48

Очевидно, что при использовании прототипа тратится меньше памяти (При количестве экземпляров > 1, конечно). Ну и, возможно, конструктор работает дольше.

Но в этом случае не получится реализовать приватные поля, т.к. они обычно реализуются замыканиями (разве что определить публичные getter + setter).

А вообще, все эти отличия в плане клибоайтов затрат памяти и наносекунд времени не играют особой роли. Выбирайте тот способ, который удобнее Вам.

Kolyaj 27.10.2010 22:57

1 vs 2 обмусолено не раз, лучше прототип, как сказал уже B@rmaley.e><e.

3 и 5 по сути ничем не отличаются -- фабрика объектов. Иногда нужна, но редко.

В 4 this будет равен window, т.е. семантически неверно.

Kolyaj 27.10.2010 22:59

Отличный вопрос для собеседования, кстати :)


Часовой пояс GMT +3, время: 19:54.