【发布时间】:2009-12-24 18:04:08
【问题描述】:
感谢this question 的精彩回复,我了解如何使用可变参数调用 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 中使用可变参数调用构造函数?
【问题讨论】:
标签: javascript constructor variadic-functions