感谢对this question的出色响应,我理解了如何使用varargs调用javascript函数。
现在,我希望将应用与构造函数结合使用
我发现了一些有趣的信息,on this post。
但是我的代码正在抛出错误
尝试1:
var mid_parser = new Parser.apply(null, mid_patterns);错误:
TypeError: Function.prototype.apply called on incompatible [object Object]尝试2:尝试1:
var mid_parser = new Parser.prototype.apply(null, mid_patterns);错误:
TypeError: Function.prototype.apply called on incompatible [object Object]企图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);错误:
syntax_model.js:91: SyntaxError: malformed formal parameter企图3:
var mid_parser = Parser.apply(null, mid_patterns);错误:
TypeError: this.init is undefined // init is a function of Parser.prototype我现在有个解决办法:
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);这是很好的工作,但它不是像我想的那样干净和普遍。
在javascript中可以用varargs调用构造函数吗?
发布于 2012-10-09 21:49:09
要完成@CMS解决方案并保留原型链,您可以这样做:
var mid_parser = {};
mid_parser.__proto__ = Parser.prototype;
Parser.apply(mid_parser, mid_patterns);作为一个附带说明,它将不与IE8-。
https://stackoverflow.com/questions/1959247
复制相似问题