Прототипы или замыкания, что выбрать при создании объекта с методами?
30.04.2014 02:29
0В JS создать объект с методами можно так (прототипы):
function some() {...} some.prototype = { f1: function() { ... }, f2: function() { ... } };
Или - так (замыкания):
function some() { ... return { f1: function() { ... }, f2: function() { ... } } }
И то и другое можно потом вызывать так:
var o = some(); o.f1(); o.f2();
Вопрос в том, чем отличается, что лучше и еще - когда.
Отличает по большей части тем, что при прототипировании создается лишь объект столько раз, сколько был раз порожден прототипный класс, функции из прототипа не создаются заново.
А если использовать замыкания - то создаются и объект и функции столько раз, сколько будет вызвана функция-конструктор.
А что лучше и почему этот вопрос вообще назревает. Ну во-первых, через замыкания код получается короче и иногда читаемей (this например не нужен у переменных), ну а во-вторых, когда можно решить задачу несколькими путями лично мне всегда интересно узнать, какой же из путей - правильней.
После нашего бурного обсуждения формализовать картинку можно так:
На самом деле предпочтительнее всегда прототипный вариант - т.к. он менее ресурсоемкий и более универсальный. Прототипы легко расширяемы, имеют возможности наследования, более подходят для тестирования.
Однако в случае небольшого количества методов (2-3) и когда таких объектов создается не много, то для краткости можно использовать и замыкания. Плюсы замыкания в том, что они полностью инкапсулируют всю реализацию и выступают в роли "черного ящика", что бывает иногда полезно.
30.04.2014, Protocoder