Как добавить EventListener для объекта в JavaScript, который будет срабатывать при манипулировании объектом? - PullRequest
8 голосов
/ 11 октября 2010

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

Например:

var ui_states = {
  tabs : [
    {
      name     : "some tab",
      active   : true,
      children : { ... }
    },
    {
      name     : "some other tab",
      children : { ... }
    }
  ]
}

Я держу это на html5 localStorage, и когда пользователь обновляет сайт, он снова открывает страницу. И каждый раз, когда пользовательский интерфейс меняет этот объект изменяется соответственно. И только после его изменения мне нужно запустить, скажем, updateLocalStorage(), который работает отлично.

У меня вопрос к этому потоку. Могу ли я создать собственное событие для моего ui_states объекта, например, ui_states.addEventListener('onchange', function(){ // do stuff }), чтобы не запускать эту функцию updateLocalStorage() каждый раз, когда я манипулирую объектом?

Спасибо.

1 Ответ

3 голосов
/ 11 октября 2010

Вы смешиваете программирование JavaScript с программированием DOM. События - это просто концепция DOM. Объекты JS не поддерживают обработчики событий.

Единственный способ сделать это - создать геттеры и сеттеры. Существуют способы сделать это с помощью специальных свойств , но, к сожалению, поддержка браузера немного затруднена. Другой способ сделать это - использовать явные методы и частные переменные. Это возможно, но немного сложно.

...