当前位置:首页 > JavaScript

watch js实现

2026-04-05 21:07:52JavaScript

watch.js 实现方法

watch.js 是一个轻量级的 JavaScript 库,用于监视对象属性的变化。以下是几种实现方法:

watch js实现

使用 Object.defineProperty

通过 Object.defineProperty 可以定义属性的 getter 和 setter,从而在属性被访问或修改时触发回调。

watch js实现

function watch(obj, prop, callback) {
  let value = obj[prop];
  Object.defineProperty(obj, prop, {
    get() {
      return value;
    },
    set(newValue) {
      if (newValue !== value) {
        const oldValue = value;
        value = newValue;
        callback(newValue, oldValue);
      }
    }
  });
}

使用 Proxy

Proxy 可以拦截对象的操作,提供更灵活的监视能力。

function watch(obj, callback) {
  return new Proxy(obj, {
    set(target, prop, value) {
      const oldValue = target[prop];
      if (value !== oldValue) {
        target[prop] = value;
        callback(prop, value, oldValue);
      }
      return true;
    }
  });
}

使用第三方库

如果不想手动实现,可以使用现成的库如 watch.jsmobx

// 使用 watch.js 库
const obj = { a: 1 };
watch(obj, (prop, action, newValue, oldValue) => {
  console.log(`Property ${prop} changed from ${oldValue} to ${newValue}`);
});
obj.a = 2; // 触发回调

注意事项

  • Object.defineProperty 只能监视已有属性,无法检测新增属性。
  • Proxy 可以监视所有属性变化,包括新增属性,但兼容性较差。
  • 第三方库通常提供更全面的功能,如深度监视、批量更新等。

标签: watchjs
分享给朋友:

相关文章

js实现全选

js实现全选

实现全选功能的方法 在JavaScript中实现全选功能通常涉及监听全选复选框的点击事件,并根据其状态控制其他复选框的选中状态。以下是几种常见的实现方式: 基础DOM操作实现 通过获取所有目标复选框…

js实现复制功能

js实现复制功能

使用 document.execCommand 方法 这种方法适用于较旧的浏览器,但在现代浏览器中可能被逐步淘汰。通过创建一个临时的 textarea 元素,将文本内容放入其中,然后执行复制命令。…

js 实现分页

js 实现分页

实现分页的基本逻辑 分页功能通常需要后端返回数据总量或总页数,前端根据当前页码和每页条数截取对应数据。以下是一个基于JavaScript的简单分页实现方案: 前端分页实现 假设已有从后端获取的完整数…

js分组实现

js分组实现

分组实现方法 在JavaScript中,可以通过多种方式实现数组或对象的分组操作。以下是几种常见的方法: 使用Array.prototype.reduce() 通过reduce方法可以轻松实现数组分…

js实现报表

js实现报表

使用JavaScript实现报表 在JavaScript中实现报表功能可以通过多种方式完成,常见的方法包括使用原生JavaScript、第三方库(如Chart.js、D3.js)或结合后端数据渲染。以…

js实现点击显示和隐藏

js实现点击显示和隐藏

实现点击显示和隐藏的JavaScript方法 使用classList.toggle切换类名 通过添加/移除CSS类控制元素的显示与隐藏,需提前在CSS中定义隐藏样式(如display: none)。…