javascript - 使用 MutationObserver 监听变化?

标签 javascript

我有一个使用 setInterval 来检查某些对象状态的脚本,但它会导致一点延迟,我想知道是否可以使用 MutationObserver

我的setInterval:

var checkExist = setInterval(function() {
    var life = 300;
    var games = Game.currentGame.ui.playerPetTick.health;
    if (games < life) {
        console.log("It exists")
        clearInterval(checkExist);
    }
}, 100); // check every 100ms

我的观察者尝试:

var target = Game.currentGame.ui.playerPetTick.health;

var observer = new MutationObserver(function(mutations) {
    mutations.forEach(function(mutation) {
        console.info("It exists");
    });    
});

var config = { attributes: true, childList: true, characterData: true };

observer.observe(target, config);

这可以做到吗?

最佳答案

MutationObserver 在这里不会帮助你,因为你的对象似乎不是 DOM 节点。但是您可以使用 getters 轻松实现某种对象观察/settersproxy objects 。一个简单的例子:

var playerInfo = {
  set health(newValue) {
    this._health = newValue;
    if (this.onhealthchange) {
      this.onhealthchange(newValue);
    }
  },

  get health() {
    return this._health;
  }
};

playerInfo.onhealthchange = function(newValue) {
  console.info("Health changed: " + newValue);
};

playerInfo.health = 4;

关于javascript - 使用 MutationObserver 监听变化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52575771/

相关文章:

javascript - 删除内部div时正确调整外部div

javascript - 反转 toFactory 与 toDynamicValue

javascript - 浏览器加载同一张图片 2 次

Javascript 切换图像和 div

javascript - 使用 1 个数组条件和外部 bool 条件过滤数组

javascript - ANGULAR-UI-ROUTER:从 URL 解析状态

javascript - 通过key输出JSON对象

javascript - 使用jquery的困难

javascript - JS 中是否可以将对象属性作为引用传递?

javascript - 我如何使用 JSDoc 枚举 "enums"?