ES6 允許擴充特殊對象,包括 Function 物件。這意味著可以從 Function 物件繼承並建立可以作為函數呼叫的物件。然而,實現這些呼叫的邏輯可能具有挑戰性,因為將函數作為函數呼叫時的行為與將其作為方法呼叫時的行為不同。
使用閉包存取實例資料
解決這個問題的傳統方法是使用閉包。閉包是一個可以存取其創建環境的函數。這允許函數即使作為函數呼叫時也可以存取類別的實例資料。
<code class="js">class Smth extends Function { constructor(x) { super(() => { return x; }); } }</code>
使用擴充函數
另一種方法是使用擴充功能。擴展函數是可用於擴展現有物件的行為的函數。在這種情況下,我們可以使用擴充函數來建立 Function 物件的擴充版本,這樣當物件作為函數呼叫時,我們就可以存取實例資料。
<code class="js">class ExtensibleFunction extends Function { constructor(f) { return Object.setPrototypeOf(f, new.target.prototype); } } class Smth extends ExtensibleFunction { constructor(x) { super(() => { return x; }); } }</code>
這種方法更靈活比使用閉包更好,因為它可以用來擴展任何函數,而不僅僅是 Function 物件。
透過使用這些技術,可以使用 ES6 類別擴展 Function 物件並實現函數呼叫的自訂邏輯.
以上是如何使用閉包和擴展函數透過 ES6 類別擴展函數物件?的詳細內容。更多資訊請關注PHP中文網其他相關文章!