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),但如果它是跨平台的话,我只会觉得这样做很舒服.
本机方法的行为取决于 EcmaScript 规范。
\n\n对于Date 规范说:
\n\n\n当 Date 作为函数而不是构造函数调用时,它返回表示当前时间 (UTC) 的字符串。
\n\n注意:函数调用 Date(\xe2\x80\xa6)不等于具有相同参数的对象创建表达式 new Date(\xe2\x80\xa6)。
\n
对于Array规范说
\n\n\n当 Array 作为函数而不是构造函数调用时,它会创建并初始化一个新的 Array 对象。
\n\n因此,函数调用\n Array(\xe2\x80\xa6)相当于具有相同参数的对象创建表达式 new Array(\xe2\x80\xa6)\n。
\n
因此,它如何在有或没有new关键字的情况下工作完全取决于您使用的方法,以及规范所说的在没有 new 关键字的情况下调用时应该发生的情况。
例如,Math 对象又不同了
\n\n\n\nMath 对象没有 [[Construct]] 内部属性;无法使用 Math 对象作为带有 new 运算符的构造函数。
\n
| 归档时间: |
|
| 查看次数: |
199 次 |
| 最近记录: |