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

标签 javascript events event-handling dom-events

我有一个动态操作的复杂 UI 结构,假设我有一个 ui_state 对象,我在其中保存用户的最新 UI 状态,例如哪个选项卡可见,该选项卡内有什么等。

例如:

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

我将它保存在 html5 localStorage 上,当用户刷新网站时,它会重新打开相同的页面。每次 UI 更改时,此对象都会相应更改。在更改它之后我需要运行让我们说 updateLocalStorage(),它运行良好。

我的问题是关于这个流程,我可以为我的 ui_states 对象创建一个自定义事件,比如 ui_states.addEventListener('onchange', function(){//do stuff }) 每次操作对象时不运行 updateLocalStorage() 函数?

最佳答案

您正在混淆 JavaScript 编程和 DOM 编程。事件纯粹是一个 DOM 概念。 JS 对象不支持事件处理程序。

唯一的方法是创建 getter 和 setter。有很多方法可以用 special properties 做到这一点,但不幸的是,浏览器支持可能有点。另一种方法是使用显式方法和私有(private)变量。 This is possible but a little complex.

关于javascript - 如何将 eventListener 添加到 JavaScript 中的对象,该对象将在操作对象时触发?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3903226/

相关文章:

javascript - 从网站保存嵌入式 pdf

javascript - Javascript 中的 Excel 到 JSON 模式

循环内的Javascript点击功能

javascript - 如何从 JavaScript 中的多个元素中删除事件监听器?

javascript - 降低 Javascript 事件轮询的频率

c# - 如何删除 'Click' 的 'Button' 事件的所有事件处理程序?

javascript - 如何将短拖动事件解释为点击

events - 将 c# 转换为 vb.net 'RaiseEvent' 语句以引发事件以使用 Gzip

c# - 防止事件产生另一个线程

actionscript-3 - 在 AS3 中,removeEventListener(Event.ENTER_FRAME) 不起作用