如何使用 JavaScript 元编程实现 Thing 类中的 can 方法动态创建新方法?
使用 javascript 元编程实现 thing 类
问题:
实现一个 thing 类,该类的 can 方法可以动态创建新方法,如以下示例代码所示:
const jane = new thing('jane'); jane.can.speak(phrase => `${name} says: ${phrase}!`); expect(jane.speak('hello')).to.equal('jane says: hello!');
问题所在:
在 can.speak 中,name 变量的值从哪里获取?
解决方案:
class Thing { constructor(name) { this.name = name; globalThis.name = name; } }
- 使用 proxy: 对 can 属性使用 proxy,在获取 speak 属性时设置 globalthis.name,在函数调用后还原它。
- 使用 function 构造函数(较复杂): 将 can.speak 回调函数转换为字符串,使用 function 构造函数将其求值并存储在 speak 属性中。这样可以在 speak 函数内部访问 thing 实例的 name。
以上就是如何使用 JavaScript 元编程实现 Thing 类中的 can 方法动态创建新方法?的详细内容,更多请关注www.sxiaw.com其它相关文章!