Как запустить функцию в JavaScript при каждом изменении переменной?

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

спасибо.

5 ответов


использовать object.watchdocs и если он не поддерживается изначально, посмотрите на эту реализацию:


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

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

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

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


в 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-bases.


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

это грязный трюк,.


поскольку JavaScript еще не повсеместно поддерживает методы setter/getter, я бы рекомендовал вам подумать о том, как вы устанавливаете свои переменные. Один из методов, который будет работать:

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]);

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