当前位置:首页 > JavaScript

watch js实现

2026-02-01 04:43:38JavaScript

使用 MutationObserver 监听 DOM 变化

MutationObserver 是 JavaScript 提供的 API,用于监视 DOM 树的变化。通过创建观察者实例并指定目标节点,可以捕获节点属性、子节点或内容的变化。

const observer = new MutationObserver((mutations) => {
  mutations.forEach((mutation) => {
    console.log('DOM 变化:', mutation.type);
  });
});

observer.observe(document.body, {
  attributes: true,    // 监听属性变化
  childList: true,     // 监听子节点变化
  subtree: true        // 监听所有后代节点
});

监听对象属性的变化(Proxy)

Proxy 可以拦截对象的操作,例如属性读取、赋值等。通过定义 setter 和 getter,可以实现对对象属性的监听。

watch js实现

const target = { value: 1 };
const handler = {
  set(obj, prop, newValue) {
    console.log(`属性 ${prop} 从 ${obj[prop]} 变为 ${newValue}`);
    obj[prop] = newValue;
    return true;
  }
};

const watchedObj = new Proxy(target, handler);
watchedObj.value = 2; // 输出: "属性 value 从 1 变为 2"

监听数组变化

通过重写数组的 push、pop 等方法,可以监听数组的变更。结合 Proxy 或自定义方法实现。

watch js实现

const array = [1, 2, 3];
const arrayPrototype = Array.prototype;
const modifiedArray = Object.create(arrayPrototype);

['push', 'pop', 'splice'].forEach(method => {
  modifiedArray[method] = function(...args) {
    console.log(`数组调用了 ${method} 方法`);
    return arrayPrototype[method].apply(this, args);
  };
});

Object.setPrototypeOf(array, modifiedArray);
array.push(4); // 输出: "数组调用了 push 方法"

监听事件(EventTarget)

通过 addEventListener 监听标准 DOM 事件(如 click、input),适用于用户交互或浏览器事件的监听。

document.getElementById('myButton').addEventListener('click', (event) => {
  console.log('按钮被点击', event.target);
});

监听变量变化(Object.defineProperty)

适用于旧版浏览器或 Vue 2.x 的数据绑定实现方式,通过定义属性的 getter 和 setter 监听变化。

let _value = 1;
const obj = {};

Object.defineProperty(obj, 'value', {
  get() { return _value; },
  set(newValue) {
    console.log(`值从 ${_value} 变为 ${newValue}`);
    _value = newValue;
  }
});

obj.value = 2; // 输出: "值从 1 变为 2"

标签: watchjs
分享给朋友:

相关文章

js实现选项卡

js实现选项卡

实现选项卡的基本思路 选项卡通常由一组标签和对应的内容面板组成。点击标签时,显示对应的内容面板,隐藏其他面板。实现这一效果需要结合HTML结构、CSS样式和JavaScript交互逻辑。 HTML结…

利用js实现

利用js实现

使用 JavaScript 实现 在 JavaScript 中,可以通过多种方式实现功能,具体取决于需求。以下是几种常见的方法: 方法一:使用原生 JavaScript // 示例代码…

js进度条实现

js进度条实现

使用HTML和CSS创建基础结构 在HTML中创建一个容器元素用于显示进度条,通常使用<div>元素。CSS用于设置进度条的样式,包括宽度、高度、颜色和圆角等属性。 <div cl…

js分页实现

js分页实现

分页的基本原理 分页的核心是通过计算当前页码和数据偏移量,从服务器或本地数据中截取对应范围的数据进行展示。通常需要以下参数:当前页码(currentPage)、每页条数(pageSize)、总数据量(…

js实现图片滚动

js实现图片滚动

图片滚动的实现方法 使用CSS动画实现 通过CSS的animation和@keyframes可以实现简单的图片滚动效果。这种方法适合静态图片的无缝循环滚动。 <style> .scr…

js实现乘法

js实现乘法

实现乘法运算的方法 在JavaScript中实现乘法运算可以通过多种方式完成,以下列举几种常见方法: 基础运算符 直接使用乘法运算符*是最简单的方式: let result = 3 * 5; //…