Я недавно попадал в OOP javascript и все больше и больше слышал о закрытии. После дня извращения моего мозга я теперь понимаю их *, но я до сих пор не вижу преимущества над использованием объекта. Кажется, что они делают то же самое, но я подозреваю, что что-то не хватает.Есть ли практическая причина, почему я выбрал бы закрытие объекта?
* я думаю
Редактировать
Я только что потратил 20 минут, пытаясь написать пример использования счетчика записывается в виде объекта и счетчик записывается в виде закрытия. Я пришел к выводу, что я до сих пор не понимаю закрытия.
вторых Редактировать
Хорошо, я сумел кнут в чрезвычайно простого примера. Между этими двумя не так много, но я считаю, что версия объекта более читаема. Почему я выбрал один за другим?
/*** Closure way ***/
function closureCounter() {
var count = 0;
return {
increase : function() {
count++;
alert(count);
},
decrease : function() {
count--;
alert(count);
}
};
}
var myCounter = closureCounter();
myCounter.increase();
myCounter.decrease();
/*** Object way ***/
function objCounter() {
var count = 0;
this.increase = function() {
count++;
alert(count);
}
this.decrease = function() {
count--;
alert(count);
}
}
var myCounter = new objCounter();
myCounter.increase();
myCounter.decrease();
Я не уверен, что я Понимаю. Можете ли вы привести пример двух вещей, которые вы сравниваете? Я представляю что-то вроде 'function (x) {...}' versus возможно '{f: function (x) {...}}', но я не уверен. – Ken
Затворы и объекты - это разные понятия и могут использоваться одновременно. Что вы подразумеваете, используя закрытие объектов? Можете ли вы привести пример, пожалуйста? –
Среда, в которой функция закрывается, не отличается от метода, который имеет доступ к внутреннему состоянию объекта. Я скорее рассматриваю это как другой способ выражения той же концепции. –