Я новичок в JS (от С++/etc), и мне просто пришло в голову, что закрытие кажется более простым и удобным способом обработки инкапсуляции, чем классы. Этот код, как представляется, дает простой способ обработки инкапсуляции:
function addProperty(o) {
var value;
o["get"] = function() { return value; }
o["set"] = function(v) { value = v; }
}
// create two independent objects which are instances of pseudo-class 'addProperty',
// which each have their own version of a set of local fields, and methods that
// operate on those fields:
var a = {};
addProperty(a);
var b = {};
addProperty(b);
Если вы просто хотите, чтобы класс обрабатывал инкапсуляцию (в С++ я нахожу это большую часть времени), есть ли веская причина использовать класс JS вместо закрытия? Вышеприведенный код кажется более интуитивным и компактным, чем классы JS. Нет конструкторов, прототипов или чрезмерного использования 'this'. Вы также получаете то преимущество, что вы должны явно объявлять локальные поля, а не надеяться, что вы не делаете никаких опечаток в своем конструкторе.
ИЗМЕНИТЬ
Хорошо, я просто уточню. Похоже, слово "класс" получает некоторые резервные копии. "Класс", во всяком случае, является расширением концепции типа, а JS не подходит на этом фронте, но я могу делать различные вещи класса с тем, что моя книга (Flanagan) проводит 50 страниц, вызывающих классы. Сортировка.
В любом случае, реальный вопрос заключается в следующем: я использую вкладки jQuery в своем первом веб-приложении. Вчера я заметил, что это не работает, потому что мой JS-код не сохраняет какое-либо личное состояние для каждой вкладки. Когда я переключаюсь между вкладками, динамические/мышиные части моего кода больше не работают должным образом.
Итак, что лучший способ представить частное состояние в приложении? Большая часть кода безопасна, но все, что обрабатывает динамическое поведение, должно каким-то образом инкапсулировать локальное состояние каждой вкладки. С помощью фона С++ явным ответом для меня является создание класса, определяющего динамические части вкладки, и создание экземпляра нового объекта вкладки каждый раз, когда создается вкладка. То, что мне трудно разобраться, заключается в том, действительно ли существуют псевдоклассы JS, или я должен расширить код выше.
Просто прочитайте ссылку на образцы модулей от Джонатана, и теперь мне кажется, что это может быть ответ.
Спасибо.