我正在调试一些复杂的动画内容,有时需要减慢时间以查看发生了什么。由于代码非常复杂,修改动画代码并不可行,因此我决定按照以下方式修改 Date
类:
let ___date = Date.now();
const ___now = Date.now;
Date = new Proxy(Date, {
construct(target, args) {
if (args[0] === undefined) args[0] = this.adjust()
let date = new target(...args);
return date;
},
get(target, prop, receiver) {
if (prop === 'now') {
let date = new Date()
date.now = () => this.adjust()
return Reflect.get(date, prop, receiver)
}
return Reflect.get(target, prop, receiver)
},
apply(target, thisArg, argumentList) {
return toString.bind(new Date()).call();
},
adjust() {
// ...
}
});
对于new Data()
和Date.now()
的使用结果是期望的。通过这个简单的修改,我能够继续进行,但后来发现代码并没有按照预期运行,因为代码的某些部分仍然以忽略我的调整的速度运行。我很快意识到setTimeout()
和setInterval()
函数是导致问题的原因。
我该如何覆盖setTimeout()
和setInterval()
,以便可以动态地调整时间,即不仅在函数启动时,而且在运行过程中也可以进行调整?