Heim > Web-Frontend > js-Tutorial > Kann der „neue' Operator von JavaScript mit der Methode „.apply()' funktionieren?

Kann der „neue' Operator von JavaScript mit der Methode „.apply()' funktionieren?

Barbara Streisand
Freigeben: 2024-12-17 09:31:25
Original
344 Leute haben es durchsucht

Can JavaScript's `new` Operator Work with the `.apply()` Method?

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
Nach dem Login kopieren

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);
    }
})();
Nach dem Login kopieren

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));
}
Nach dem Login kopieren

Dies kann wie folgt verwendet werden:

var s = newCall(Something, a, b, c);
Nach dem Login kopieren

Vorteile der Verwendung Function.prototype.bind

Dieser Ansatz hat mehrere Vorteile:

  • Es funktioniert mit allen Konstruktoren, auch mit speziellen Konstruktoren wie Date.
  • Das kann sein Wird prägnant verwendet und übergeben Argumente direkt an new.
  • Es behält den ursprünglichen Konstruktor bei Prototyp.

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!

Quelle:php.cn
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