什么时候*不*在内置插件上使用新工作?

use*_*476 7 javascript standards

使用内置的JavaScript对象和构造函数,我注意到有点奇怪的东西.

有时,可以通过调用构造函数来获取新对象new.例如:

> new Array(1,2,3,4)
[1, 2, 3, 4]
> Array(1,2,3,4)
[1, 2, 3, 4]
Run Code Online (Sandbox Code Playgroud)

但有时这不起作用:

> Date()
"Thu Jun 05 2014 00:28:10 GMT-0600 (CST)"
> new Date()
Date 2014-06-05T06:28:10.876Z
Run Code Online (Sandbox Code Playgroud)

是否在ECMAScript规范中的任何位置定义了非新构造函数内置函数的行为?请注意,此行为实际上很有用; 我可以通过调用来制作一个非稀疏的数组副本Array.apply(arr),但如果它是跨平台的话,我只会觉得这样做很舒服.

ade*_*neo 1

本机方法的行为取决于 EcmaScript 规范。

\n\n

对于Date 规范说:

\n\n
\n

当 Date 作为函数而不是构造函数调用时,它返回表示当前时间 (UTC) 的字符串。

\n\n

注意:函数调用 Date(\xe2\x80\xa6)不等于具有相同参数的对象创建表达式 new Date(\xe2\x80\xa6)。

\n
\n\n

对于Array规范

\n\n
\n

当 Array 作为函数而不是构造函数调用时,它会创建并初始化一个新的 Array 对象。

\n\n

因此,函数调用\n Array(\xe2\x80\xa6)相当于具有相同参数的对象创建表达式 new Array(\xe2\x80\xa6)\n。

\n
\n\n

因此,它如何在有或没有new关键字的情况下工作完全取决于您使用的方法,以及规范所说的在没有 new 关键字的情况下调用时应该发生的情况。

\n\n

例如,Math 对象又不同了

\n\n
\n

Math 对象没有 [[Construct]] 内部属性;无法使用 Math 对象作为带有 new 运算符的构造函数。

\n
\n


归档时间:

查看次数:

199 次

最近记录:

11 年,7 月 前