#javascript #typescript
#javascript #typescript
Вопрос:
Я пытаюсь создать шпионскую функцию, я создаю функцию, которая принимает другую функцию и переопределяет ее. Но я получаю возможность переопределить это.
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: [] }
Комментарии:
1. Поскольку вы замораживаете объект,
Object.freeze(metadata)
.2. Я думаю, что это было, но потом я понимаю, что
console.log
внутри переназначения не вызывается3. Да, потому что глобальная
f
не меняется, меняется только локальнаяf
переменная. пожалуйста, ознакомьтесь с определением области видимости переменной JavaScript.