在以下JavaScript代码中调用main()。 我的问题是为什么调用第二个构造函数而不是第一个构造函数? 我在这里缺少什么?
谢谢!
function AllInputs() {
alert("cons 1");
this.radioInputs = [];
alert(this);
}
function AllInputs(radioElement) {
alert("cons 2");
this.radioInputs = [radioElement];
alert(this);
}
AllInputs.prototype.toString = function() {
return "[object AllInputs: radioInputs: " + this.radioInputs.length + "]";
}
function main() {
var result = new AllInputs();
}
答案 0 :(得分:7)
Javascript不支持重载功能。
当您定义两次相同的功能时,第二个定义将替换第一个定义。
相反,您应该创建一个函数,并检查arguments.length
以查看传递了多少个参数。
例如:
function AllInputs(radioElement) {
this.radioInputs = arguments.length ? [radioElement] : [];
alert(this);
}
答案 1 :(得分:1)
在JavaScript中,使用标识符的最后一个定义:
function foo() { return "bar"; }
var foo = "foo";
alert(foo);
在这种情况下,foo
是一个值为“foo”的变量。如果foo
是一个函数,它就会简单地说foo
是一个函数。如果您不相信,请尝试使用alert(foo())
而不是alert(foo)
。您很可能在控制台日志中出现错误,没有像alert(foo)
那样的可见输出(变量......而不是函数调用)。
答案 2 :(得分:0)
function foo() { ... }
实际上只是
的简写var foo = function () { ... }
因此,第二次声明该函数时,您将使用不同的函数覆盖变量AllInputs
。在Javascript中没有两个具有相同名称的函数,因为所有函数都是变量。