@ZENbZ
Начинающий веб-разработчик, чуточку программист

Можно ли избавиться от setInterval?

Написал скрипт для проверки изменения переменной, но мне не нравится использование setInterval. Можно ли переписать код(или если вдруг есть функция/метод, но подобного не нашел), без использования setInterval?(если да, то как?)

name      = 'Вася';
name_save = '';

function NameCheck() {
  if(name != name_save) {
    name_save = name;
    $('.name_input').val(name);
  }
}

setInterval(NameCheck, 0);
  • Вопрос задан
  • 254 просмотра
Решения вопроса 1
@alexalexes
Геттеры и сеттеры.
Только если ваша переменная является свойством объекта, тогда вы можете задать свою set-функцию, которая не требует от остальной части скрипта какой-то модификации.
На глобальной переменной my_var делается это так:
Object.defineProperty(window /*- объект, где располагается свойство */, "my_var" /* - свойство, которое нужно опекать */,
{
  get: function() // сторожим чтение значения
  {
    alert('Кто-то прочилал my_var!');
  },
  set: function(newValue) // сторожим запись значения
  {
    alert('Кто-то записал my_var! Новое значение: ' + newValue);
  }
});
my_var = 123456;  // пробуем записать что-то
you_var = my_var; // пробуем извлечь значение
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
demon416nds
@demon416nds
Разработчик на чем попало
а зачем мониторить то?
меняйте все там где переменная меняется
Ответ написан
Fragster
@Fragster
помогло? отметь решением!
Пора переходить на vuejs (ну, или реакт, но там больше готовить надо, прям с наскока не получится).
Ответ написан
Ваш код не работает
var name      = 'Вася';
name_save = '';

function NameCheck() {
  if(name != name_save) {
    name_save = name;
    console.log(name);
  }
}

setInterval(NameCheck, 0);
setTimeout(()=>name = "111");
setTimeout(()=>name = "222");
setTimeout(()=>name = "333");


setInterval не будет срабатывать после каждого тика исполнения.

Поэтому, изменение отдельной переменной вы отслеживать не сможете, а вот свойства объекта - легко, даже не меняя его с помощью Observe или Proxy.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы