Verwendung von .apply () mit dem Operator 'new'. Ist das möglich?
In JavaScript möchte ich eine Objektinstanz erstellen (über dienew
Operator), aber übergeben Sie eine beliebige Anzahl von Argumenten an den Konstruktor. Ist das möglich?
Was ich tun möchte, ist so etwas (aber der folgende Code funktioniert nicht):
function Something(){
// init stuff
}
function createSomething(){
return new Something.apply(null, arguments);
}
var s = createSomething(a,b,c); // 's' is an instance of Something
Die Antwort
Aus den Antworten hier wurde klar, dass es keine integrierte Möglichkeit zum Anrufen gibt.apply()
mit demnew
Operator. Die Leute schlugen jedoch eine Reihe wirklich interessanter Lösungen für das Problem vor.
Meine bevorzugte Lösung wardieser von Matthew Crumley (Ich habe es geändert, um das zu bestehenarguments
Eigentum):
var createSomething = (function() {
function F(args) {
return Something.apply(this, args);
}
F.prototype = Something.prototype;
return function() {
return new F(arguments);
}
})();