使用 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中文網其他相關文章!