巧用装饰器模式:为函数实现调用次数记录功能
要实现一个装饰器模式的函数来记录另一个函数的调用次数,我们可以定义一个高阶函数(即装饰器),它接受一个函数作为参数,并返回一个新的函数。这个新函数在每次被调用时,会更新和打印调用次数。 下面是一个具体的实现: ```javascript function callCounter(fn) { let count = 0; // 初始化调用计数器 return function(...args) { count++; // 每次调用时增加计数器 console.log(`called ${count} ${count === 1 ? 'time' : 'times'}`); // 输出调用次数 return fn.apply(this, args); // 调用原始函数并传递所有参数 }; } // 定义一个简单的函数 function sayHello(name) { console.log('hello ' + name); } // 使用装饰器包装函数 const sayHelloWithCounter = callCounter(sayHello); // 测试装饰后的函数 sayHelloWithCounter('Alice'); // 输出: called 1 time 和 hello Alice sayHelloWithCounter('Bob'); // 输出: called 2 times 和 hello Bob sayHelloWithCounter('Charlie'); // 输出: called 3 times 和 hello Charlie ``` 解释 1. callCounter 函数: - 接受一个函数 `fn` 作为参数。 - 创建一个闭包变量 `count` 来记录调用次数。 - 返回一个新的函数,该函数在每次被调用时: - 增加 `count` 的值。 - 打印当前的调用次数。 - 调用原始函数 `fn` 并传递所有参数。 2. sayHello 函数: - 这是一个简单的函数,接受一个名字并打印问候语。 3. sayHelloWithCounter: - 使用 `callCounter` 装饰器包装 `sayHello` 函数。 - 每次调用 `sayHelloWithCounter` 时,都会增加调用计数并打印当前的调用次数,然后执行 `sayHello` 函数。 通过这种方式,我们可以轻松地为任何函数添加调用次数的记录功能。 ######[AI写代码神器 | 478点数解答 | 2024-11-12 09:04:00]
- Python 实现简易密码设置系统:多种功能交互与安全要点揭秘(字节豆包 | 286点数解答 | 2025-03-28 10:43:21)361
- C语言实现多功能密码设置系统:含代码及安全注意要点(字节豆包 | 414点数解答 | 2025-03-28 10:43:55)350
- C 语言实现:超简单密码设置系统,含代码与注意要点!(字节豆包 | 519点数解答 | 2025-03-28 12:42:02)387
- C语言实现密码管理系统:含功能代码与安全注意事项(字节豆包 | 409点数解答 | 2025-04-05 18:09:56)335
- C语言实现多功能密码系统:初始化、确认、设置、显示、重置与退出(字节豆包 | 454点数解答 | 2025-04-05 18:48:42)334
- C语言实现密码管理系统:含初始化、确认、设置、显示、重置及退出功能(字节豆包 | 413点数解答 | 2025-04-06 15:37:16)281
- C 语言实现密码管理系统:含初始化、确认、设置、显示、重置及退出功能(字节豆包 | 403点数解答 | 2025-04-06 15:37:54)296
- Python 实现球类:精准计算半径、表面积与体积,附输入验证与异常处理!(阿里通义 | 261点数解答 | 2024-11-28 21:19:39)346
- C 语言实现链表操作:创建、输出、删除及插入功能详解(字节豆包 | 534点数解答 | 2024-12-09 21:33:48)343
- C语言实现链表创建、输出、删除与插入操作的完整代码及注意要点(字节豆包 | 609点数解答 | 2024-12-18 12:18:21)362
- 卡牌游戏技能“教化”机制全解析:规则、代码与注意要点 (DeepSeek | 353点数解答 | 2025-07-07 15:40:28)169
- Python 模拟无名杀“教化”技能:出牌阶段规则与代码实现及优化建议(字节豆包 | 546点数解答 | 2025-07-07 15:41:02)175