使用 ES6 类扩展 Function
在 ES6 中,可以扩展特殊对象,允许从 Function 对象继承。虽然可以将此类对象作为函数调用,但实现此调用的逻辑可能具有挑战性。
将实例数据传递给函数调用
将类作为函数调用时,this 指的是窗口对象。要访问实例数据,有两种方法可用:
class Smth extends Function { constructor(x) { super("return " JSON.stringify(x) ";"); } }
class Smth extends Function { constructor(x) { function smth() { return x; }; Object.setPrototypeOf(smth, Smth.prototype); return smth; } }
抽象函数扩展
更通用的方法是创建一个处理扩展的 ExtensibleFunction 类:
class ExtensibleFunction extends Function { constructor(f) { return Object.setPrototypeOf(f, new.target.prototype); } }
该类可用于扩展特定类:
class Smth extends ExtensibleFunction { constructor(x) { super(() => { return x; }); // closure } }
总之,使用 ES6 类扩展 Function 可以在自定义调用逻辑的同时继承函数的行为。调用扩展函数时,可以使用不同的方法来提供对实例数据的访问。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3