Aufruf des Klassenkonstruktors ohne neues Schlüsselwort in ES6
Gegebene Klassendefinition:
class Foo { constructor(x) { if (!(this instanceof Foo)) return new Foo(x); this.x = x; } hello() { return `hello ${this.x}`; } }
Es ist nicht möglich, den Klassenkonstruktor ohne das Schlüsselwort new direkt aufzurufen. Dies liegt daran, dass Klassen in ES6 von Natur aus über eine Konstruktorfunktion verfügen, die aufgerufen wird, wenn die Klasse aufgerufen wird.
Der Aufruf einer Klasse ohne neue führt zu einem Fehler:
Cannot call a class as a function
Diese Fehlermeldung weist deutlich darauf hin, dass der Klassenkonstruktor nur mit dem neuen Operator aufgerufen werden kann, der zum Erstellen einer neuen Instanz der Klasse erforderlich ist.
Um diese Einschränkung zu überwinden, sollten Sie die folgenden Ansätze in Betracht ziehen :
function Foo(x) { this.x = x; this.hello = function() { return `hello ${this.x}`; } }
(new Foo("world")).hello(); // "hello world"
var FooWrapper = function(...args) { return new Foo(...args) }; FooWrapper("world").hello(); // "hello world"
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