我正在尝试构建一个间谍函数,正在构建一个接受另一个函数并覆盖它的函数。但是我能够覆盖它。
function spy(f: (...args: any[]) => any | void) {
const g = f;
const metadata: IMetadata = {
calledCount: 0,
calledWith: []
}
f = function (...prototypeArgs: any[]) {
console.log('Hello from prototype')
metadata.calledCount++
metadata.calledWith!.push(prototypeArgs)
return g(...prototypeArgs)
}
return Object.freeze(metadata)
}
我正在对此进行测试
const g = spy(f)
f()
f()
console.log(g)
但是g没有改变,因为没有被覆盖。
{ calledCount: 0, calledWith: [] }