Uso de .apply () con el operador 'nuevo'. es posible?
En JavaScript, quiero crear una instancia de objeto (a través de lanew
operador), pero pasa un número arbitrario de argumentos al constructor. es posible?
Lo que quiero hacer es algo como esto (pero el siguiente código no 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
La respuesta
A partir de las respuestas aquí, quedó claro que no hay una forma integrada de llamar.apply()
con elnew
operador. Sin embargo, la gente sugirió una serie de soluciones realmente interesantes para el problema.
Mi solución preferida fueeste de Matthew Crumley (Lo he modificado para pasar elarguments
propiedad):
var createSomething = (function() {
function F(args) {
return Something.apply(this, args);
}
F.prototype = Something.prototype;
return function() {
return new F(arguments);
}
})();