javascript - 监听 JavaScript 中的变量变化

标签 javascript jquery dom-events

JS 中是否可以有一个事件,当某个变量的值发生变化时触发? JQuery 被接受。

最佳答案

这个问题最初于 2009 年发布,大多数现有答案要么过时、无效,要么需要包含大型臃肿的库:

自 2018 年起,您现在可以使用 Proxy object 来监视(和拦截)对对象所做的更改。它是专门为 OP 想要做的事情而构建的。这是一个基本示例:

var targetObj = {};
var targetProxy = new Proxy(targetObj, {
  set: function (target, key, value) {
      console.log(`${key} set to ${value}`);
      target[key] = value;
      return true;
  }
});

targetProxy.hello_world = "test"; // console: 'hello_world set to test'

Proxy 对象的唯一缺点是:

  1. Proxy 对象在较旧的浏览器(例如 IE11)和 polyfill 中不可用。无法完全复制代理功能。
  2. 代理对象在特殊对象(例如,Date)中的表现并不总是符合预期 - Proxy 对象最好与普通对象或数组搭配使用。

如果您需要观察对嵌套对象所做的更改,那么您需要使用专门的库,例如 Observable Slim (我已发布)。它的工作原理如下:

var test = {testing:{}};
var p = ObservableSlim.create(test, true, function(changes) {
    console.log(JSON.stringify(changes));
});

p.testing.blah = 42; // console:  [{"type":"add","target":{"blah":42},"property":"blah","newValue":42,"currentPath":"testing.blah",jsonPointer:"/testing/blah","proxy":{"blah":42}}]

 

关于javascript - 监听 JavaScript 中的变量变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41855644/

相关文章:

javascript - 一组单选按钮上的 onfocus 事件如何像单个控件一样工作?

javascript - 基于另一个字段值对一个字段使用设置字段值

javascript - 使用 JavaScript 的 Canvas 元素 'rubbing out' 效果

javascript - JQuery:在抓取 .text() 时用分隔符替换 <br/>

javascript - 如何通过在angularjs中使用多个复选框来显示和隐藏多个div?

javascript - 为什么在 Javascript 游戏中不触发 onkeyup 事件

javascript - -webkit-用户选择 :none and -ms-user-select:none copying the content

javascript - Promise 的第一个调用者应获取数据,后续调用者应等待

jquery - 使用 jquery 或 javascript 更改 CSS 根变量

javascript - 通过单击 Javascript 中的按钮在表格单元格中设置文本