gpt4 book ai didi

javascript - 数组创建,为什么会这样?

转载 作者:行者123 更新时间:2023-11-30 10:36:56 25 4
gpt4 key购买 nike

我明白为什么:

 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/

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