参见英文答案 >
Can we omit parentheses when creating an object using the “new” operator?7个
我刚刚看到这段代码,同时在Gmail中意外开启开发工具:
我刚刚看到这段代码,同时在Gmail中意外开启开发工具:
var GM_TIMING_END_CHUNK1=(new Date).getTime();
我通常会期待这样的东西,因为调用没有括号的构造函数并不常见(至少我从来没有看到它):
var GM_TIMING_END_CHUNK1=new Date().getTime();
要么
var GM_TIMING_END_CHUNK1=Date.Now(); //newer browsers
这样做有什么好处吗?这是完全相同的字符数量,所以简洁不会是一个原因.
解决方法
如果不传递任何参数,则可以在JS中的括号中调用构造函数,效果是相同的.
new Date()vs new Date一样.
但是,当您想对结果对象调用方法时,它会有所作为:
new Date().getTime()工作,但是新的Date.getTime()不会因为在后一种情况下,解释器假定getTime是Date类型的方法,但这不是真的,getTime是一个实例方法 – 仅存在于构造的对象中.为了克服这个问题,您可以围绕构造函数调用括起来告诉解释器它是一个表达式:
(new Date).getTime()
这样一来,首先对表达式进行评估,并对作为Date实例的结果调用getTime.