Uso de .apply () com o operador 'new'. Isso é possível?
Em JavaScript, eu quero criar uma instância de objeto (vianew
operador), mas passe um número arbitrário de argumentos para o construtor. Isso é possível?
O que eu quero fazer é algo assim (mas o código abaixo não funciona):
function Something(){
// init stuff
}
function createSomething(){
return new Something.apply(null, arguments);
}
var s = createSomething(a,b,c); // 's' is an instance of Something
A resposta
A partir das respostas aqui, ficou claro que não há nenhuma maneira interna de ligar.apply()
com onew
operador. No entanto, as pessoas sugeriram várias soluções realmente interessantes para o problema.
Minha solução preferida eraeste de Matthew Crumley (Eu modifiquei para passar oarguments
propriedade):
var createSomething = (function() {
function F(args) {
return Something.apply(this, args);
}
F.prototype = Something.prototype;
return function() {
return new F(arguments);
}
})();