当前位置:首页 > 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
分享给朋友:

相关文章

jquery.js

jquery.js

jQuery 是一个快速、简洁的 JavaScript 库,简化了 HTML 文档遍历、事件处理、动画设计和 Ajax 交互等操作。以下是关于 jQuery.js 的核心信息和使用方法: 获…

vue实现watch

vue实现watch

在 Vue 中实现 watch 的方法 Vue 的 watch 用于监听数据变化并执行相应的回调函数。以下是几种常见的实现方式: 基本用法 通过选项式 API 的 watch 属性监听数据变化:…

js实现类

js实现类

JavaScript 实现类的几种方式 JavaScript 是一种基于原型的语言,但在 ES6 之后引入了 class 语法糖,使得实现类更加直观。以下是几种常见的实现方式: 使用构造函数 传统的…

js怎么实现异步

js怎么实现异步

异步实现方法 JavaScript中实现异步操作主要通过以下几种方式: Promise Promise是ES6引入的异步解决方案,用于处理异步操作的成功或失败状态。 const promise =…

js实现按钮点击

js实现按钮点击

实现按钮点击的JavaScript方法 HTML按钮元素 在HTML中创建按钮元素,为其添加id或class以便JavaScript选择: <button id="myButton">点…

js实现弹框

js实现弹框

使用 alert 实现简单弹框 JavaScript 的 alert 方法可以直接显示一个简单的弹框,内容为纯文本: alert("这是一个简单的弹框"); 使用 confirm 实现确认弹框…