在JavaScript中,我们可以使用`Object.defineProperty`方法来监听对象属性的变化,从而实现类似Vue中的watch功能。以下是一个简单的例子:
复制
function Watcher(obj, prop, callback) { let value = obj[prop]; Object.defineProperty(obj, prop, { get: function() { return value; }, set: function(newValue) { const oldValue = value; value = newValue; callback(newValue, oldValue); } }); } const data = { name: 'Alice' }; Watcher(data, 'name', (newValue, oldValue) => { console.log(`Name changed from ${oldValue} to ${newValue}`); }); data.name = 'Bob'; // 输出:Name changed from Alice to Bob
复制
在上面的例子中,我们定义了一个Watcher
函数,该函数接受三个参数:需要监听的对象obj
、属性名prop
和回调函数callback
。在Watcher
函数内部,我们使用Object.defineProperty
方法定义了一个新的属性描述符,通过get
和set
方法来监听属性的获取和设置,当属性被设置时,会触发回调函数并传入新旧值。
通过这种方式,我们可以模仿Vue中的watch功能,实现对对象属性的监听和响应。