首頁  >  文章  >  web前端  >  如何擴展 ES6 類別中的函數:導航「this」和閉包技術

如何擴展 ES6 類別中的函數:導航「this」和閉包技術

Barbara Streisand
Barbara Streisand原創
2024-10-21 06:02:30817瀏覽

How to Extend Functions in ES6 Classes: Navigating 'this' and Closure Techniques

使用ES6 類別擴充函數:理解「this」和閉包技巧

擴充ES6 中的特殊物件允許從函數繼承,從而允許從函數繼承,從而允許從函數繼承使它們成為可能被稱為函數。但是,實作此類呼叫的邏輯需要仔細考慮“this”引用。

預設情況下,當在類別實例上呼叫方法時,「this」指向實例本身。然而,當直接呼叫函數時,「this」指的是全域物件(例如,視窗)。為了解決這個問題,我們有兩個選擇:

1。在建構函數中硬編碼資料:

「super」呼叫可以呼叫 Function 建構函數,需要一個代碼字串。要存取實例數據,我們可以對其進行硬編碼:

class Smth extends Function {
  constructor(x) {
    super("return " + JSON.stringify(x) + ";");
  }
}

2.閉包和閉包包裝器:

為了更靈活的解決方案,我們需要建立一個閉包,將實例資料指派給傳回的函數:

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);
  }
}

子類別可以繼承ExtensibleFunction:

class Smth extends ExtensibleFunction {
  constructor(x) {
    super(function() { return x; });
  }
}

使用箭頭函數或命名函數也可以提供替代方法,儘管它們可能在以下方面有所不同:他們的繼承行為。

以上是如何擴展 ES6 類別中的函數:導航「this」和閉包技術的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn