nhờ câu trả lời tuyệt vời cho this question Tôi hiểu cách gọi hàm javascript bằng vararg.javascript áp dụng trên hàm tạo, ném "thông số chính thức không đúng định dạng"
bây giờ tôi đang tìm cách để sử dụng áp dụng với một constructor
Tôi tìm thấy một số thông tin thú vị on this post.
nhưng mã của tôi là ném lỗi
nỗ lực 1:
var mid_parser = new Parser.apply(null, mid_patterns);
lỗi:
TypeError: Function.prototype.apply called on incompatible [object Object]
nỗ lực 2: nỗ lực 1:
var mid_parser = new Parser.prototype.apply(null, mid_patterns);
lỗi:
TypeError: Function.prototype.apply called on incompatible [object Object]
nỗ lực 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);
lỗi:
syntax_model.js:91: SyntaxError: malformed formal parameter
nỗ lực 3:
var mid_parser = Parser.apply(null, mid_patterns);
lỗi:
TypeError: this.init is undefined // init is a function of Parser.prototype
Tôi có một workaround cho thời gian được:
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);
này hoạt động khá tốt, nhưng nó không phải là sạch và phổ thông như tôi muốn.
là nó có thể trong javascript để gọi một nhà xây dựng với varargs?
+1, cảm ơn tuyệt vời –
Rất thú vị. Tôi đã chơi xung quanh với điều này một chút và nó hoạt động rất độc đáo * trong một số trường hợp *. Không phải tất cả các nhà thầu đều hỗ trợ phương pháp này. 'Date', ví dụ:' var date = new Date; Date.call (ngày, 1984, 3, 26) '. – davidchambers
Function.apply (new Function(), arg) /* Là một giải pháp một dòng */ – TERMtm