Переменная будет добавляться в контексте глобального объекта javascript, как его свойство. Для создания свойства объекта воспользуемся специальным методом.
Внимание!
Не рекомендуется работать напрямую с глобальным объектом window.
В коде из статьи этот объект используется только для примера.
Общий вид метода
/** * @param [Object] obj объект, в котором создаётся свойство * @param [Object] props объекты, чьи собственные свойства * являются дескрипторами */ Object.defineProperties(obj, props)
Реализация обработчиков событий
/** * Обработчик события получения переменной. * * @param value значение переменной */ function gettingHandler(value) { console.log("Значение переменной = " + value); } /** * Обработчик события изменения переменной. * * @param oldValue старое значение переменной * @param newValue новое значение переменной */ function settingHandler(oldValue, newValue) { console.log("Старое значение переменной = " + oldValue); console.log("Новое значение переменной = " + newValue); } /** * Определяет два свойства глобального объекта. На первое свойство будут повешены обработчики событий, * а второе будет использоваться как хранилище значения первого. */ Object.defineProperties(window, { "myVarriable": { get: function () { gettingHandler(myVarriableValue); // вызывает обработчик события return myVarriableValue; // возвращает значение }, set: function (value) { settingHandler(myVarriableValue, value); // вызывает обработчик события myVarriableValue = value; // присваивает значение }, }, "myVarriableValue": { value: 0, // значение по умолчанию configurable: true, // признак того, что свойство можно изменить writable: true // признак того, что значение можно изменить с помощью оператора присваивания } });
Внимание!
Нужно очень осторожно подходить к подобной реализации, т.к. сильно ухудшается "прозрачность" кода.
Вызов событий получения и изменения переменной
var test = myVarriable; // выведет сообщение "Значение переменной = 0" myVarriable = 3; // выведет сообщения "Старое значение переменной = 0" и "Новое значение переменной = 3"
Комментариев пока нет.