watch 如何同时监听两个对象
时间: 2024-12-12 13:32:39 浏览: 3
在JavaScript中,如果你想要同时监听两个对象的变化,通常你可以通过事件监听或者订阅者模式(如观察者模式)来实现。这里有两个常见的方法:
1. **属性改变事件** (如`Object.observe` 或 `MutationObserver` in modern browsers):对于支持这些API的对象,你可以创建一个观察者,它会监听指定对象的属性变化。例如:
```javascript
let objA = { prop: '' };
let objB = { prop: '' };
let observer = new MutationObserver((mutationsList) => {
mutationsList.forEach((mutation) => {
if (mutation.type === 'attributes') {
console.log('Property changed:', mutation.target);
}
});
});
// 观察 objA 和 objB 的 'prop' 属性
observer.observe(objA, { attributes: true });
observer.observe(objB, { attributes: true });
```
2. **发布/订阅模式**:可以使用第三方库如`eventemitter3`或自定义简单的函数,让每个对象都有"发布"更改的能力,其他对象可以作为"订阅者"接收更新。例如:
```javascript
const EventEmitter = require('events');
class MyObject extends EventEmitter {
constructor() {
super();
}
updateProp(propValue) {
this.prop = propValue;
this.emit('propertyChange', this.prop);
}
}
let objA = new MyObject();
let objB = new MyObject();
objA.on('propertyChange', (value) => {
console.log('ObjA property changed:', value);
});
objB.on('propertyChange', (value) => {
console.log('ObjB property changed:', value);
});
// 更新对象属性
objA.updateProp('new value');
```
阅读全文