# 1.setInterval 方法
直观且朴素的方法,可以用 setInterval,循环检测变量的值。
<html> | |
<body> | |
<script> | |
// 要监视的变量 | |
var test_value = 1; | |
setInterval(function(){ | |
if(test_value != 1){ | |
console.log("值变成了:",test_value); | |
} | |
},1000); | |
</script> | |
</body> | |
</html> |
在这个例子中,方法比较直接保守,且浪费资源。
# 2.Getter 和 Setter 方法
可以用于在获取和设置变量值时执行自定义的操作。
var test_obj = {}; | |
Object.defineProperties(test_obj, { | |
a: { | |
get: function() { | |
console.log("取值:",a) | |
return a | |
}, | |
set: function(new_value) { | |
a = new_value; | |
console.log("设值:",a) | |
} | |
} | |
}); | |
test_obj.a = "JShaman是专业的JavaScript混淆加密平台"; |
在这个例子中,
- 我们使用
Object.defineProperty()
方法定义了一个名为name
的属性,其中包括了 Getter 和 Setter 方法。 - 当设置
name
属性的值时,Setter 方法会被触发,我们可以在 Setter 方法中编写自定义的操作。
在这个例子中,我们在 Setter 方法中添加了一条打印语句,用于捕捉变量 name
的改变。
# 3.Proxy 对象
ES6 引入的 Proxy 对象是 JavaScript 中的另一个强大工具,可以用于监听对象的操作,并在操作发生时执行相应的逻辑。
let data = { | |
name: 'John' | |
} | |
// 创建一个 Proxy 对象 | |
let proxy = new Proxy(data, { | |
set: function(target, key, value) { | |
target[key] = value; | |
console.log(`变量${key}发生了改变`) | |
// 执行其他操作 | |
return true; | |
} | |
}) |
在这个例子中,
- 我们使用
new Proxy()
语法创建了一个 Proxy 对象,其中定义了一个 set 方法。 - 当设置 Proxy 对象的属性值时,set 方法会被触发,我们可以在 set 方法中编写自定义的操作。
在这个例子中,我们通过设置 Proxy 对象的 name 属性值来捕捉变量改变的事件,并触发相应的回调函数。
# 4. 监听 DOM 元素的改变
除了监听变量的改变,我们还可以监听 DOM 元素的改变。JavaScript 提供了 MutationObserver 接口,用于监听 DOM 树的变化,并在变化发生时执行相应的操作。
// 目标元素 | |
let target = document.getElementById('my-element'); | |
// 创建一个 MutationObserver 实例 | |
let observer = new MutationObserver(function(mutations) { | |
mutations.forEach(function(mutation) { | |
console.log('DOM元素发生了改变'); | |
// 执行其他操作 | |
}) | |
}) | |
// 配置观察选项 | |
let config = { attributes: true, childList: true, subtree: true } |
在这个例子中,
- 我们首先通过
document.getElementById()
获取目标元素,然后创建了一个 MutationObserver 实例,并定义了一个回调函数。 - 回调函数会在观察的 DOM 元素发生变化时被触发,我们可以在其中编写自定义的操作。
- 最后,通过调用
observe()
方法,将目标元素和观察选项传递给 MutationObserver 实例,开始监听 DOM 元素的改变。