在JavaScript中,创建一个新对象的典型方法是像这样执行:
new Date()
。但是你也可以这样做:new (Date)
。那么这两种方法有什么不同和优势呢?new Date()
。但是你也可以这样做:new (Date)
。那么这两种方法有什么不同和优势呢?没有区别。
new
运算符需要一个函数引用作为操作数。
和其他运算符一样,操作数可以有括号。
()
在没有参数的new
表达式后是可选的。
然而,如果括号内有更复杂的表达式,它们可能会改变优先级顺序,例如在这个答案中所示。
var parser = new(less.Parser);
除了制造混淆之外?他们本可以像这样写:new less.Parser()
。 - Andrew Youngnew ctorExpr
或 new ctorExpr(...)
,在后一种情况下,ctorExpr
被视为 (Date).toString
,这不是一个有效的构造函数,因此它会抛出异常。也就是说,后者被解析为 new ((Date).toString) ()
,而前者是 (new (Date)()).toString()
。这并不改变 (...)
是可选还是必需的,尽管它确实改变了它的解析方式。 - user166390我相信后一种方式与第一种方式是相同的。我认为它将被解释为new Date
,因为括号中没有任何要评估的内容。请注意,new Date
等同于new Date()
。