回到课程

间谍装饰器

重要程度: 5

创建一个装饰器 spy(func),它应该返回一个包装器,它在 calls 属性中保存所有函数调用。

每个调用都保存为一个参数数组。

例如:

function work(a, b) {
  alert( a + b ); // work 是一种任意的函数或方法
}

work = spy(work);

work(1, 2); // 3
work(4, 5); // 9

for (let args of work.calls) {
  alert( 'call:' + args.join() ); // "call:1,2", "call:4,5"
}

附:该装饰器有时用于单元测试,它的高级形式是 Sinon.JS 库中的 sinon.spy

打开带有测试的沙箱。

在这里,我们可以使用 calls.push(args) 来存储日志中的所有参数,并使用 f.apply(this, args) 来转发调用。

使用沙箱的测试功能打开解决方案。