Как запустить функцию в JavaScript при каждом изменении переменной?
есть ли способ в JavaScript иметь что-то вроде события, которое слушает изменения в переменной? поэтому, когда его значение изменяется на события, а затем я могу вызвать функцию. Чтобы поместить это в контекст, у меня есть функция, которая обрабатывает HTML-рендеринг массива объектов, и я хочу, чтобы эта функция вызывалась автоматически при каждом изменении массива.
спасибо.
5 ответов
использовать object.watch
docs и если он не поддерживается изначально, посмотрите на эту реализацию:
Я не думаю, что вы спрашиваете можно.
решением может быть:
- инкапсулируйте свои данные в конкретный объект
- доступ к данным с помощью метода этого объекта
- имейте этот метод 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]);
Я лично не большой поклонник добавления новых методов к базовым прототипам, но это упрощает рефакторинг в краткосрочной перспективе.