Heim >Web-Frontend >js-Tutorial >Können Sie den „new'-Operator mit „.apply()' in JavaScript verwenden, um Objekte mit variablen Argumenten zu erstellen?
In JavaScript kann es wünschenswert sein, eine Objektinstanz mit dem neuen Operator zu erstellen während eine variable Anzahl von Argumenten an den Konstruktor übergeben wird. Dies ist jedoch mit dem von Ihnen bereitgestellten Code-Snippet nicht möglich.
1. Matthew Crumleys Ansatz:
Diese Lösung beinhaltet die Erstellung einer neuen Funktion, F, die den Something-Prototyp erweitert und einen Wrapper für die apply()-Methode bereitstellt. Es kann wie folgt umgesetzt werden:
var createSomething = (function() { function F(args) { return Something.apply(this, args); } F.prototype = Something.prototype; return function() { return new F(arguments); } })();
2. ECMAScript 5-Lösung:
Mit ECMAScript 5 kann die Methode Function.prototype.bind für eine präzisere Lösung verwendet werden:
function newCall(Cls) { return new (Function.prototype.bind.apply(Cls, arguments)); }
Diese Funktion kann wie folgt verwendet werden:
var s = newCall(Something, a, b, c);
oder sogar direkt:
var s = new (Function.prototype.bind.call(Something, null, a, b, c));
Erklärung:
Die Bindungsmethode ermöglicht es uns, eine neue Funktion zu erstellen, die denselben Kontext (diesen Wert) wie die ursprüngliche Funktion hat, aber übernimmt eine begrenzte Anzahl von Argumenten. Mithilfe der Methode apply() können wir eine variable Anzahl von Argumenten an die gebundene Funktion übergeben. Schließlich kann der neue Operator auf die gebundene Funktion angewendet werden, um eine neue Objektinstanz zu erstellen.
Das obige ist der detaillierte Inhalt vonKönnen Sie den „new'-Operator mit „.apply()' 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!