gpt4 book ai didi

javascript - 为什么将 Array.of() 应用于对象会在 JavaScript/ECMAScript 中创建数字

转载 作者:行者123 更新时间:2023-11-29 18:46:37 25 4
gpt4 key购买 nike

我在阅读 ES 规范时发现 Array.of() 使用 this 来创建一个新实例。

22.1.2.3 Array.of ( ...items )

Note 2: The of function is an intentionally generic factory method; it does not require that its this value be the Array constructor. Therefore it can be transferred to or inherited by other constructors that may be called with a single numeric argument.

然后我尝试使用 Object 作为 this 创建,如下所示。但是,它会创建 Number 实例,而其他的如 DateRegExp 或我的类会创建自己的实例。

const arr = Array.of.apply(Object, ['Hey']);

console.log(arr instanceof Number); // => true
console.log(Object.prototype.toString.apply(arr)); // => '[object Number]'

为什么这个 arr 不是 Object 的实例而是 Number 的实例?

规范:https://www.ecma-international.org/ecma-262/9.0/index.html#sec-array.of

最佳答案

来自规范:

4. If IsConstructor(C) is true, then
a. Let A be ? Construct(C, « len »).

鉴于 CObject 并且您将一个参数传递给 Array.of,这与执行相同

new Object(1)

它返回一个 Number 对象(因为这就是 Object 的定义方式)。

关于javascript - 为什么将 Array.of() 应用于对象会在 JavaScript/ECMAScript 中创建数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53381581/

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