
使用 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!');
问题所在:
立即学习“Java免费学习笔记(深入)”;
在 can.speak 中,name 变量的值从哪里获取?
解决方案:
使用 globalthis: 创建 thing 实例时将 name 作为全局变量存储到 globalthis 对象中。在调用 speak 函数时,访问 globalthis.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 方法动态创建新方法?的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1494567.html
微信扫一扫
支付宝扫一扫