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