javascript 运行时修改回调函数
页面加载后,通过控制台代码修改回调函数
javascript 运行时修改回调函数
页面代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<!DOCTYPE html>
<html lang="zh-cn">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>运行时修改回调函数</title>
</head>
<body>
<input type="button" id="doCat" name="doCat" value="doCat">
<script type="text/javascript">
// 运行时通过控制台改变函数内部变量和函数
function cat() {
let inner = 0;
console.log(arguments.callee.name,inner);
// console.log(arguments.callee.toString());
}
function onload() {
const btn = document.querySelector('#doCat');
btn.onclick = cat;
console.log(`原回调函数\n`,btn.onclick.toString());
}
window.addEventListener("load",onload);
</script>
</body>
</html>
控制台代码
1
2
3
4
5
6
7
8
9
10
11
(function cat2dog()
{
const reg = new RegExp(`(?<=let inner = )(?<value>\\d+)`,"g");
let str_dog = cat.toString().replace(reg,100);
const dog = eval(`(()=>${str_dog})();`);// 注意语法
//console.dir(dog);
cat = dog; // 不能替换掉 cat;因为之前赋值的地址未更新
const btn = document.querySelector('#doCat');
btn.onclick = cat; // 重新绑定到新地址
return 'dog to cat OK';
})();
本文由作者按照 CC BY 4.0 进行授权