Это перевод статьи Quick Tip: Private Variables in JavaScript.
Подсказка: private-переменные в Javascript
Из-за зависимости JavaScript от глобальных переменных, можно легко забыть, что создание часных переменных (private variables) может быть реализовано так же просто, как и замыкания. За несколько минут, я продемонстрирую две основные техники, предоставляющие часные переменные и медоды в ваших проектах. Read more…
Мне почему-то понадобилось реализовать паттерн проектирования Registry на Javascript. Как сделать это на PHP для меня не представляло сложности, а вот понять объектную модель Javascript у меня никогда не получалось. Самое сложное для меня остаётся понять, почему вышло реализовать Singleton.
Код пишу сюда, потому что могу и забыть как делается
<script type="text/javascript">
function Registry(){
if(!this.instance){
/* нет пока объекта
создадим
*/
function registry(){ }
/* сборище хэшей для передаваемых объектов */
registry.prototype.reg = {}
/* метод для добавления объектов */
registry.prototype.add = function(name, object){
this.reg[name] = object;
}
/* метод для получение объектов */
registry.prototype.get = function (name){
return this.reg[name];
}
this.instance = new registry();
}
return this.instance;
}
.* а так его использовать */
/* добавляем в реестр объект */
Registry().add('test', 3);
/* получаем объект */
alert(Registry().get('test'));
</script>
Вот и всё. И даже не скажешь, что не спал ночь )
Это вторая часть серии “Функция отмены – это просто”. Если вы их пропустили, то прочитайте первую часть [ перевод ].
В предыдущий раз рассматривали метод очереди событий, как полностью клиентскую реализацию лёгкой многоуровневой функции отмены. Я упоминал о паре обмолвок: это не работает в многопользовательской среде и не работает в время-зависимых событиях, как отправка email. Я пропустил существенную оговорку, на которой обратил внимание один с моих читателей, Alexander Botero-Lowry: два таба, в которых открыта одна и та же страница, не синхронизируются. Я написал, как это решить с помощью cookies [ перевод ]. Read more…