Я пытаюсь склонить голову вокруг идеи классов, видимости и закрытия данных (в частности, в Javascript), и я нахожусь на странице docs jQuery для типов, он упоминает, что закрытие используется для скрытия данных:
Шаблон позволяет создавать объекты с помощью методов, которые работают с данными, которые не видны снаружи - сама основа объектно-ориентированного программирования.
Пример:
function create() {
var counter = 0;
return {
increment: function() {
counter++;
},
print: function() {
console.log(counter);
}
}
}
var c = create();
c.increment();
c.print(); // 1
Объявив счетчик переменных с ключевым словом var, он уже локально ограничен внутри определения функции/класса. Насколько я знаю и могу сказать, он не доступен извне для начала. Я что-то пропустил с точки зрения видимости данных.
Во-вторых, есть ли преимущество в написании класса, как указано выше, например:
function create() {
var counter = 0;
this.increment = function() {
counter++;
}
this.print = function() {
console.log(counter);
}
return this;
}
var c = create();
c.increment();
c.print(); // 1
Как я понимаю, это более или менее семантически одно и то же: первый - это просто "стиль jQuery". Мне просто интересно, есть ли преимущество или какой-то другой нюанс, который я не совсем понимаю из первого примера. Если я прав, оба примера создают замыкания в том, что они обращаются к данным, объявленным вне их собственной области.