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);
    }
})();

Antworten auf die Frage(30)

Ihre Antwort auf die Frage