Как запустить функцию в JavaScript каждый раз, когда переменная изменяется? - PullRequest
8 голосов
/ 12 марта 2011

Есть ли в JavaScript способ создать что-то похожее на событие, которое прослушивает изменения в переменной? поэтому, когда его значение модифицируется, событие запускается, и тогда я могу вызвать функцию. Для большей ясности у меня есть функция, которая обрабатывает html-рендеринг массива объектов, и я хочу, чтобы эта функция вызывалась автоматически каждый раз, когда массив модифицируется.

Спасибо.

Ответы [ 5 ]

7 голосов
/ 12 марта 2011

Используйте object.watch документы и, если это не поддерживается, посмотрите на эту реализацию: Object.watch () для всех браузеров?

6 голосов
/ 12 марта 2011

Я не думаю, что вы спрашиваете, возможно.

Решением может быть:

  • инкапсулирует ваши данные в конкретный объект
  • получить доступ к этим данным, используя метод установки этого объекта
  • имеют этот метод установки оба:
    • установить данные
    • вызовите вашу функцию

Но это потребует от вас переписать немного вашего кода.

2 голосов
/ 12 марта 2011

В ECMAScript 5 есть свойства геттера / сеттера ... Читать здесь: http://ejohn.org/blog/ecmascript-5-objects-and-properties/

Браузеры без IE поддерживают нечто подобное:

http://robertnyman.com/2009/05/28/getters-and-setters-with-javascript-code-samples-and-demos/

Для IE вам придется подождать IE9 или использовать только геттеры / установщики DOM-баз.

1 голос
/ 12 марта 2011

Поскольку JavaScript пока не всегда поддерживает методы установки / получения, я бы порекомендовал вам подумать о том, как вы устанавливаете свои переменные. Одна техника, которая будет работать, это:

Array.prototype.setMember = function(index,newValue) {
    alert("I will perform some action here");
    this[index] = newValue;
}

var myArray = [1,2,3];
// x[0] = 11; // Don't do this any more
x.setMember(0,11);
alert(x[0]);

Лично я не большой поклонник добавления новых методов к базовым прототипам, но это упрощает процесс рефакторинга в краткосрочной перспективе.

1 голос
/ 12 марта 2011

Вы можете использовать setInterval для проверки его значения столько раз в секунду и сохранить его в отдельной переменной. Вы можете каждый раз проверять, отличается ли реальная переменная от другой. В этом случае вызовите функцию.

Хотя это подвох.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...