什么时候不*使用新的工作

这个问题在这里已经有了答案:

  • Array(1)和JavaScript中的新Array(1)有什么区别? 3个答案
  • JavaScript中的'new'关键字是什么? 13个答案

  • 本地方法的行为取决于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作为新表达式的一部分被调用时,它是一个构造函数:它初始化新创建的对象。

    链接地址: http://www.djcxy.com/p/40857.html

    上一篇: When does *not* using new work on built

    下一篇: In javascript, what happens when you new() a function?