Heim > Web-Frontend > js-Tutorial > Hauptteil

Wie erweitere ich Funktionen mit ES6-Klassen und greife auf Instanzvariablen zu?

Linda Hamilton
Freigeben: 2024-10-21 06:04:02
Original
564 Leute haben es durchsucht

How to Extend Functions with ES6 Classes and Access Instance Variables?

Funktionen mit ES6-Klassen erweitern

ES6 führt die Möglichkeit ein, spezielle Objekte wie das Funktionsobjekt zu erweitern. Dadurch können wir Klassen erstellen, die von Funktionen erben und sich beim Aufruf wie Funktionen verhalten. Die Implementierung der Logik für solche Aufrufe erfordert jedoch sorgfältige Überlegungen.

Den Funktionsprototyp verstehen

Beim Aufrufen einer Klasse als Funktion bezieht sich das Schlüsselwort this auf das globale Objekt (Fenster in einer Browserumgebung) und nicht die Klasseninstanz. Um auf die Klasseninstanz zuzugreifen, können wir den herkömmlichen super()-Aufruf nicht verwenden, da er eine Codezeichenfolge für den Funktionskonstruktor erwartet.

Hardcodierung des Werts

Ein Ansatz besteht darin, den Wert fest im Konstruktor zu kodieren:

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

(new Smth(256))() // Returns 256
Nach dem Login kopieren

Dies ist jedoch nicht ideal, da es auf fest kodierten Werten basiert.

Verschlüsse nutzen

Um einen Abschluss zu ermöglichen, der auf Instanzvariablen zugreifen kann, können wir eine verschachtelte Funktion innerhalb des Konstruktors erstellen:

class Smth extends Function {
  constructor(x) {
    // Refer to `smth` instead of `this`
    function smth() {
      return x;
    }
    Object.setPrototypeOf(smth, Smth.prototype);
    return smth;
  }
}

(new Smth(256))() // Returns 256
Nach dem Login kopieren

Abstraktion mit ExtensibleFunction

Um dieses Muster zu abstrahieren, Wir können eine ExtensibleFunction-Klasse erstellen:

class ExtensibleFunction extends Function {
  constructor(f) {
    return Object.setPrototypeOf(f, new.target.prototype);
  }
}

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

(new Smth(256))() // Returns 256
Nach dem Login kopieren

Dieser Ansatz bietet eine wiederverwendbare Möglichkeit, erweiterbare Funktionen mit Zugriff auf Instanzvariablen zu erstellen.

Das obige ist der detaillierte Inhalt vonWie erweitere ich Funktionen mit ES6-Klassen und greife auf Instanzvariablen zu?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!