你可以使用ES6的Proxy对象来模拟Vue的watch功能。下面是一个简单的例子:
复制
const data = { value: 1 }; const watchers = {}; const handler = { get(target, key) { if (key in target) { watchers[key] && watchers[key](target[key]); return target[key]; } return undefined; }, set(target, key, value) { target[key] = value; watchers[key] && watchers[key](value); return true; } }; const proxy = new Proxy(data, handler); function $watch(key, callback) { watchers[key] = callback; } $watch('value', (newValue) => { console.log(`Value changed to ${newValue}`); }); proxy.value = 2;
复制
在上面的代码中,我们首先定义了一个对象data
和一个空对象watchers
来存储观察的属性和相应的回调函数。然后定义了一个handler
对象来处理属性的读取和写入操作。利用Proxy对象创建了一个代理对象proxy
,并在get
和set
方法中触发回调函数。
最后,通过$watch
函数来为属性注册观察者,并在属性发生变化时执行对应的回调函数。当修改proxy
对象的属性值时,会触发相应的回调函数来实现类似于Vue的watch功能。