In JavaScript wird häufig eine Objektinstanz mit dem „new“-Operator erstellt erfolgt durch direkte Übergabe von Argumenten an den Konstruktor. Es gibt jedoch Szenarien, in denen man Argumente dynamisch bereitstellen möchte. In diesem Artikel geht es um die Frage, ob die Verwendung von „.apply()“ mit dem „new“-Operator machbar ist, um dies zu erreichen.
Trotzdem Aufgrund der Vielseitigkeit kann die Methode „.apply()“ nicht direkt mit dem Operator „new“ verwendet werden. Versuche, dies zu tun, führen zu unerwartetem Verhalten oder Fehlern.
Die JavaScript-Community hat den Bedarf an solchen Funktionen erkannt und verschiedene innovative Lösungen vorgeschlagen.
Ein Ansatz, der Matthew Crumley zugeschrieben wird, verwendet einen Funktionsprototyp, um einen zu erstellen Problemumgehung:
var createSomething = (function() { function F(args) { return Something.apply(this, args); } F.prototype = Something.prototype; return function() { return new F(arguments); } })();
Diese Lösung erstellt effektiv eine neue Funktion mit dem gewünschten Verhalten.
„Function.prototype.bind“ von ECMAScript 5 bietet eine sauberere Lösung :
function newCall(Cls) { return new (Function.prototype.bind.apply(Cls, arguments)); }
Diese Methode lässt sich nahtlos in den „neuen“ Operator integrieren und kann auf alle Arten von angewendet werden Konstruktoren, einschließlich solcher mit besonderem Verhalten wie „Datum“.
Obwohl aufgrund möglicher Sicherheitsbedenken davon abgeraten wird, bietet die „eval“-Methode eine weitere Problemumgehung:
var s = eval("new Something(" + [a, b, c] + ")");
Diese Lösungen nutzen die bind()-Methode, um eine Funktion zu erstellen, die das Gewünschte akzeptiert Argumente. Dann wird der „new“-Operator verwendet, um ein Objekt aus dieser Funktion zu instanziieren.
Das Erstellen von Objekten mit variablen Argumenten mithilfe von „.apply()“ und dem „new“-Operator erfordert einiges Einfallsreichtum. Durch die Nutzung der verfügbaren JavaScript-Funktionen können Entwickler diese Techniken implementieren, um die gewünschte Funktionalität zu erreichen.
Das obige ist der detaillierte Inhalt vonKönnen Sie „.apply()' mit dem „new'-Operator in JavaScript verwenden, um Objekte mit variablen Argumenten zu erstellen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!