Użyj .apply () z operatorem „new”. czy to możliwe?

W JavaScript chcę utworzyć instancję obiektu (za pośrednictwemnew operator), ale przekazuje konstruktorowi dowolną liczbę argumentów. czy to możliwe?

Chcę zrobić coś takiego (ale poniższy kod nie działa):

function Something(){
    // init stuff
}
function createSomething(){
    return new Something.apply(null, arguments);
}
var s = createSomething(a,b,c); // 's' is an instance of Something

Odpowiedź

Z odpowiedzi tutaj stało się jasne, że nie ma wbudowanego sposobu na wywołanie.apply() znew operator. Jednak ludzie zasugerowali wiele naprawdę interesujących rozwiązań tego problemu.

Moim preferowanym rozwiązaniem byłoten od Matthew Crumleya (Zmodyfikowałem go, aby przekazaćarguments własność):

var createSomething = (function() {
    function F(args) {
        return Something.apply(this, args);
    }
    F.prototype = Something.prototype;

    return function() {
        return new F(arguments);
    }
})();

questionAnswers(30)

yourAnswerToTheQuestion