Funktion mit ES6-Klassen erweitern
In ES6 können spezielle Objekte erweitert werden, was eine Vererbung vom Funktionsobjekt ermöglicht. Obwohl es möglich ist, solche Objekte als Funktionen aufzurufen, kann die Implementierung der Logik für diesen Aufruf eine Herausforderung sein.
Übergabe von Instanzdaten an einen Funktionsaufruf
Beim Aufrufen einer Klasse als Funktion , dies bezieht sich auf das Fensterobjekt. Für den Zugriff auf Instanzdaten stehen zwei Ansätze zur Verfügung:
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; } }
Abstraktion der Funktionserweiterung
Ein allgemeinerer Ansatz besteht darin, eine ExtensibleFunction-Klasse zu erstellen, die die Erweiterung verarbeitet:
class ExtensibleFunction extends Function { constructor(f) { return Object.setPrototypeOf(f, new.target.prototype); } }
Diese Klasse kann dann verwendet werden, um bestimmte Klassen zu erweitern:
class Smth extends ExtensibleFunction { constructor(x) { super(() => { return x; }); // closure } }
Zusammenfassend lässt sich sagen, dass die Erweiterung von Function mit ES6-Klassen die Vererbung des Verhaltens der Funktion bei gleichzeitiger Anpassung der Aufruflogik ermöglicht. Um beim Aufruf der erweiterten Funktion Zugriff auf Instanzdaten zu ermöglichen, können verschiedene Ansätze verwendet werden.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3