gpt4 book ai didi

javascript应用于构造函数,抛出 "malformed formal parameter"

转载 作者:行者123 更新时间:2023-12-02 23:50:24 28 4
gpt4 key购买 nike

感谢 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 中是否可以使用可变参数调用构造函数?

最佳答案

您可以使用 apply 并传递一个空对象作为 this 参数:

var mid_parser = {};
Parser.apply(mid_parser, mid_patterns);

但是该解决方案不会关心原型(prototype)链。

您可以使用 new 运算符创建一个 Parser 对象,但不传递参数,然后使用 apply 重新运行构造函数:

var mid_parser = new Parser();
Parser.apply(mid_parser, mid_patterns);

关于javascript应用于构造函数,抛出 "malformed formal parameter",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1959247/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com