我明白为什么:
output = new Array();
和
output = [];
但为什么这样行得通呢?
output = Array();
最佳答案
Array()
构造函数的实现很简单,因此无需使用 new
调用它。这是其语义定义的一部分。
Array()
等内置构造函数(可能)不是用 JavaScript 编写的,但您可以在自己的代码中获得相同的效果:
function MyConstructor() {
"use strict";
var newObj = this || {};
// ...
return newObj;
}
当您使用 new
调用时,构造函数将看到它已绑定(bind)到 this
。如果你不这样做,那么 this
将是未定义的(因为“use strict”;你也可以检查 this
是否是全局对象,你会必须为旧的 IE 做)。
构造函数的返回值不是 new
表达式的值——它始终是新创建的对象。但是,当您在没有 new
的情况下调用它时,将使用返回值。
edit — RobG 在评论中指出,要使其真正正常工作,需要显式设置函数创建的“合成”newObj
,以便它有合适的原型(prototype)等。这有点棘手;代码简单地执行此操作可能是最简单的:
function MyConstructor() {
"use strict";
if (!this) return new MyConstructor();
// ... or possibly using "apply" if you need parameters too
}
T.J. Crowder 在这里写了一些关于对象/继承争论的精彩回答。
关于javascript - 数组创建,为什么会这样?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13463811/