js监听某个变量变化兼容所有浏览器
时间: 2023-08-21 14:03:32 浏览: 160
要在所有浏览器中监听JavaScript变量的变化,可以使用JavaScript提供的`Object.defineProperty()`方法来实现,该方法可以定义对象的属性,从而实现对属性的监听和拦截。下面是一个使用`Object.defineProperty()`方法监听JavaScript变量的例子:
```
// 创建一个被监听的对象
const obj = {
name: 'Tom',
age: 20
};
// 定义一个函数,用于监听obj对象的属性变化
function defineReactive(obj, key, value) {
Object.defineProperty(obj, key, {
get: function() {
console.log(`读取属性${key}的值:${value}`);
return value;
},
set: function(newValue) {
console.log(`设置属性${key}的值为:${newValue}`);
value = newValue;
}
});
}
// 监听obj对象的属性变化
defineReactive(obj, 'name', obj.name);
// 修改被监听对象的属性值
obj.name = 'Jerry'; // 输出:设置属性name的值为:Jerry
```
在上面的例子中,我们通过定义一个`defineReactive()`函数,使用`Object.defineProperty()`方法将obj对象的name属性变成了可监听和拦截的。当obj对象的name属性被读取或赋新的值时,`defineReactive()`函数会分别触发get和set方法,并在控制台中输出相应的信息。
需要注意的是,`Object.defineProperty()`方法在IE8及以下的浏览器中不被支持,如果需要在这些浏览器中实现对变量的监听,可以考虑使用第三方库,比如Vue.js或MobX等。
阅读全文