In JavaScript möchte ich eine Objektinstanz erstellen (über die new
Operator), aber übergeben Sie eine beliebige Anzahl von Argumenten an den Konstruktor. Ist dies möglich?
Was ich tun möchte, ist etwas wie dieses (aber der Code unten 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 deutlich, dass es keine eingebaute Möglichkeit gibt, die .apply()
mit dem new
Betreiber. Die Leute haben jedoch eine Reihe wirklich interessanter Lösungen für dieses Problem vorgeschlagen.
Meine bevorzugte Lösung war dieser hier von Matthew Crumley (Ich habe es geändert, um die arguments
Eigenschaft):
var createSomething = (function() {
function F(args) {
return Something.apply(this, args);
}
F.prototype = Something.prototype;
return function() {
return new F(arguments);
}
})();