如何将eventListener添加到javascript中的对象,该对象在操作对象时将触发?

如何将eventListener添加到javascript中的对象,该对象在操作对象时将触发?,javascript,events,javascript-events,event-handling,Javascript,Events,Javascript Events,Event Handling,我有一个复杂的UI结构,它是动态操作的,比如说我有一个UI\u state对象,我在其中保存用户最新的UI状态,比如哪个选项卡是可见的,该选项卡中有什么等等 例如: var ui_states = { tabs : [ { name : "some tab", active : true, children : { ... } }, { name : "some other tab", c

我有一个复杂的UI结构,它是动态操作的,比如说我有一个
UI\u state
对象,我在其中保存用户最新的UI状态,比如哪个选项卡是可见的,该选项卡中有什么等等

例如:

var ui_states = {
  tabs : [
    {
      name     : "some tab",
      active   : true,
      children : { ... }
    },
    {
      name     : "some other tab",
      children : { ... }
    }
  ]
}
我将其保存在html5 localStorage上,当用户刷新站点时,它会重新打开页面。每次UI更改时,该对象都会相应更改。在更改之后,我需要运行
updateLocalStorage()
,它工作得非常好

我的问题是对于这个流,我是否可以为我的
ui\u states
对象创建一个类似
ui\u states的自定义事件。添加EventListener('onchange',function(){//do stuff})
以避免每次操作对象时都运行该
updateLocalStorage()
函数


谢谢。

你把JavaScript编程和DOM编程混为一谈了。事件纯粹是一个DOM概念。JS对象不支持事件处理程序


唯一的方法是创建getter和setter。有很多方法可以做到这一点,但不幸的是,浏览器支持有点可能。另一种方法是使用显式方法和私有变量

我不同意。事件绝对不仅仅是DOM。但这是一个松散耦合组件的概念,可以在“无Dom”-JS中实现。是的,他可能混合了这两个概念,但是的,一些纯javascript对象支持XMLHTTPRequest、RTCConnection、Worker、WebSocket等事件。。。为了完成我的评论,没有。对象不支持事件,除了(最近)使用Object.observe(仅适用于Chrome)。好的,当我发布这个答案时,事件确实只在DOM对象上。显然,从那时起,事情已经向前发展。