使用 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