使用 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 可以在自定义调用逻辑的同时继承函数的行为。调用扩展函数时,可以使用不同的方法来提供对实例数据的访问。
以上是如何使用ES6类来扩展功能和访问实例数据?的详细内容。更多信息请关注PHP中文网其他相关文章!