什么时候不*使用新的工作
这个问题在这里已经有了答案:
本地方法的行为取决于EcmaScript规范。
对于Date规格说:
当Date被作为函数而不是构造函数调用时,它会返回一个表示当前时间(UTC)的String。
注:函数调用Date(...)与具有相同参数的对象创建表达式new Date(...) 不等效 。
规范说,对Array
当数组被调用为函数而不是构造函数时,它会创建并初始化一个新的数组对象。
因此,函数调用Array(...) 等价于具有相同参数的对象创建表达式new Array(...)。
因此,如何使用或不使用new关键字完全取决于您使用的是什么方法,以及在没有新关键字的情况下调用时应该发生的内容。
例如,Math对象又是不同的
Math对象没有[[Construct]]内部属性; 无法将Math对象用作new运算符的构造函数。
是的,ECMA-262(我正在使用5.1版作为参考)确实定义了在使用或不使用new关键字调用对象构造函数时应如何表现。
对于Array :
15.4.1作为函数调用的数组构造函数:
当Array被调用为函数而不是构造函数时,它会创建并初始化一个新的数组对象。 因此,函数调用Array(…)等价于具有相同参数的对象创建表达式new Array(…) 。
15.4.2数组构造器:
当Array作为new表达式的一部分被调用时,它是一个构造函数:它初始化新创建的对象。
对于Date :
15.9.2作为函数调用的Date构造函数:
当Date被作为函数而不是构造函数调用时,它会返回一个表示当前时间(UTC)的String。
函数调用Date(…) new Date(…)与具有相同参数的对象创建表达式new Date(…)不等效。
15.9.3 Date构造函数:
Date作为新表达式的一部分被调用时,它是一个构造函数:它初始化新创建的对象。
