Kann die .apply()-Methode mit dem neuen Operator verwendet werden?
In JavaScript wird normalerweise eine Objektinstanz mit dem neuen Operator erstellt beinhaltet die explizite Übergabe von Argumenten an den Konstruktor. Es könnte jedoch wünschenswert sein, stattdessen eine variable Anzahl von Argumenten zu übergeben. Diese Frage untersucht die Möglichkeit, die .apply()-Methode in Verbindung mit dem neuen Operator zu verwenden, um diese Flexibilität zu erreichen.
Die Herausforderung
Zunächst könnte man versuchen, die folgender Code:
function Something() { // init stuff } function createSomething() { return new Something.apply(null, arguments); } var s = createSomething(a, b, c); // 's' is an instance of Something
Dieser Ansatz funktioniert jedoch nicht, da der neue Operator nicht mit .apply() kompatibel ist Methode.
Lösungen
Verschiedene Lösungen wurden vorgeschlagen, um diese Einschränkung zu überwinden:
1. Matthew Crumleys Methode
Diese Lösung verwendet eine Zwischenfunktion, die vom Zielkonstruktor erbt:
var createSomething = (function() { function F(args) { return Something.apply(this, args); } F.prototype = Something.prototype; return function() { return new F(arguments); } })();
2. Function.prototype.bind
ECMAScript5 führt die Methode Function.prototype.bind ein, die die teilweise Anwendung von Funktionen ermöglicht:
function newCall(Cls) { return new (Function.prototype.bind.apply(Cls, arguments)); }
Dies kann wie folgt verwendet werden:
var s = newCall(Something, a, b, c);
Vorteile der Verwendung Function.prototype.bind
Dieser Ansatz hat mehrere Vorteile:
Erklärung
Function.prototype.bind erstellt eine neue Funktion, die die Eigenschaften der ursprünglichen Funktion erbt. Indem wir die Konstruktorfunktion teilweise mit den gewünschten Argumenten anwenden, können wir dann eine Instanz mit dem neuen Schlüsselwort erstellen.
Das obige ist der detaillierte Inhalt vonKann der „neue' Operator von JavaScript mit der Methode „.apply()' funktionieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!