gracias a las maravillosas respuestas a this question Entiendo cómo llamar a las funciones de JavaScript con varargs.javascript aplicar en el constructor, lanzando "parámetro formal mal formado"
Ahora estoy buscando a utilizar se aplican con un constructor
he encontrado alguna información interesante on this post.
pero mi código está lanzando errores
intento 1:
var mid_parser = new Parser.apply(null, mid_patterns);
error:
TypeError: Function.prototype.apply called on incompatible [object Object]
intento 2: intento 1:
var mid_parser = new Parser.prototype.apply(null, mid_patterns);
de error:
TypeError: Function.prototype.apply called on incompatible [object Object]
intento 2:
function Parser()
{
this.comparemanager = new CompareManager(arguments);
}
mid_patterns = [objA,objB,objC]
var mid_parser = new Parser();
Parser.constructor.apply(mid_parser, mid_patterns);
error:
syntax_model.js:91: SyntaxError: malformed formal parameter
intento 3:
var mid_parser = Parser.apply(null, mid_patterns);
error:
TypeError: this.init is undefined // init is a function of Parser.prototype
tengo una solución para el momento:
function Parser()
{
if(arguments.length) this.init.call(this,arguments); // call init only if arguments
}
Parser.prototype = {
//...
init: function()
{
this.comparemanager = new CompareManager(arguments);
}
//...
}
var normal parser = new Parser(objA,objB,objC);
mid_patterns = [objA,objB,objC]
var dyn_parser = new Parser();
dyn_parser.init.apply(dyn_parser, mid_patterns);
esto funciona bastante bien, pero no es tan limpia y universal como me gustaría.
¿es posible en javascript llamar a un constructor con varargs?
+1, fantástico gracias –
Muy interesante. He jugado un poco con esto y funciona muy bien * en ciertos casos *. No todos los constructores apoyan este enfoque. 'Fecha', por ejemplo:' var date = new Date; Date.call (fecha, 1984, 3, 26) '. – davidchambers
Function.apply (new Function(), arg) /* Es una solución de una línea */ – TERMtm