javascript`new`关键字有或没有`()`

时间:2013-09-19 15:45:14

标签: javascript

foo = new Foo();  // this one I use all the time

vs

foo = new Foo;   // I don't understand what this one does

我最近看到一些代码使用new Array,现在使用()。不知道你能做到这一点。有什么区别,我何时会使用未执行的新对象?

3 个答案:

答案 0 :(得分:1)

这意味着同样的事情。如果未指定参数(括号),则使用空参数列表调用构造函数。来自EcmaScript §11.2.2, The new operator

  

生产NewExpression : new NewExpression的评估如下:

     
      
  • ...
  •   
  • 返回在构造函数上调用[[Construct]]内部方法的结果,不提供参数(即参数的空列表)
  •   
     

生产MemberExpression : new MemberExpression Arguments的评估如下:

     
      
  • ...
  •   
  • 让argList成为评估Arguments的结果,产生一个   内部参数值列表(11.2.4)。
  •   
  • ...
  •   
  • 返回调用[[Construct]]内部方法的结果   构造函数,提供列表argList作为参数值。
  •   

答案 1 :(得分:1)

他们都做同样的事情,但从造型角度来看,你应该使用new Foo();来提高可读性。

您还需要构造函数参数的括号:new Foo(options);

答案 2 :(得分:1)

两种语法都做同样的事情。这纯粹是风格问题。

我建议您通过代码库坚持使用。始终使用括号是样式指南中最常用的形式,因为它在传递选项时是一致的。