非常基本的Javascript构造函数问题

时间:2010-04-13 02:44:33

标签: javascript constructor

在以下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();
}

3 个答案:

答案 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中没有两个具有相同名称的函数,因为所有函数都是变量。