Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   событие при изменении значения переменной (https://javascript.ru/forum/misc/26677-sobytie-pri-izmenenii-znacheniya-peremennojj.html)

Раед 17.03.2012 22:52

событие при изменении значения переменной
 
Здравствуйте.
Необходимо выполнить функцию при изменении значения переменной. Существуют ли какие-нибудь события или другие реализации, позволяющие сделать это.
Я попробовал написать функцию, но столкнулся с невозможностью в JS передать переменную по ссылке.
Просьба упоминать о кроссбраузерных несовместимостях и способах их устранения.
Заранее спасибо.

monolithed 17.03.2012 23:44

Цитата:

Сообщение от Раед
Необходимо выполнить функцию при изменении значения переменной.

Не совсем ясно, что вы хотите. Покажите код.
Цитата:

Сообщение от Раед
попробовал написать функцию, но столкнулся с невозможностью в JS передать переменную по ссылке.

Можно частично эмулировать это поведение с помощью вызова объекта в контексте другого, используя методы call/apply

Раед 17.03.2012 23:49

Цитата:

Сообщение от monolithed
Не совсем ясно, что вы хотите. Покажите код.

конкретного кода нет, но например
var x=15;
x.onchange = function() {//вешаем обработчик
 alert(this);
}
x = 64//и вот сейчас он (обработчик) должен сработать и вывести alert'ом 64

monolithed 18.03.2012 00:21

Поставите таймер, или привяжите свойство к таким методам как:
DOMAttributeNameChanged
DOMAttrModified

Т.е. свяжите эту переменную с атрибутом к.л. элемента, и когда переменная изменится то сработает событие, по нему уже легко двигаться дальше.

DreamTheater 18.03.2012 00:41

Кроссбраузерная реализация watch()

Раед 18.03.2012 00:43

Цитата:

Сообщение от monolithed
Т.е. свяжите эту переменную с атрибутом к.л. элемента

что вы подразумеваете под словом "свяжите"

Раед 18.03.2012 00:47

DreamTheater,
большое спасибо, но как это применять к локальным переменным, то есть
function s() {
 var x=12
 //прослушка на x - как, свойством какого объекта он является?
}
s()

DreamTheater 18.03.2012 01:05

Цитата:

Сообщение от Раед (Сообщение 163745)
DreamTheater,
большое спасибо, но как это применять к локальным переменным, то есть
function s() {
 var x=12
 //прослушка на x - как, свойством какого объекта он является?
}
s()

Используйте сеттер:
var x;

function setX(value) {
    x = value;

    fn();
}

FINoM 18.03.2012 01:06

Раед, никак. Можно отслеживать изменение только свойства объекта.

FINoM 18.03.2012 01:30

Цитата:

Сообщение от Maxmaxmахimus
никак, они находятся в обьекте активации каждой функции к которому у программиста нет доступа

Кстати, я не понимаю, почему создатели спецификаций не замутят какой-нибудь объект, который хранит локальные переменные.


Часовой пояс GMT +3, время: 05:42.