3 回答
TA贡献1804条经验 获得超7个赞
作为特例,对于 new
如果函数调用中没有参数,JavaScript只允许省略括号,从而简化了语法。下面是使用 new
操作员: o = new Object; // Optional parenthesis omitted hered = new Date(); ...
Missing '()' invoking a constructor
1
TA贡献1824条经验 获得超8个赞
new Date().toString()
工作正常,并返回当前日期。 new Date.toString()
抛出“ TypeError:Date.toString不是构造函数"
new Date()
new Date
╔════════════╦═════════════════════════════╦═══════════════╦═════════════╗
║ Precedence ║ Operator type ║ Associativity ║ Operators ║
╠════════════╬═════════════════════════════╬═══════════════╬═════════════╣
║ 18 ║ Member Access ║ left-to-right ║ … . … ║
║ ║ Computed Member Access ║ left-to-right ║ … [ … ] ║
║ ║ new (with argument list) ║ n/a ║ new … ( … ) ║
╠════════════╬═════════════════════════════╬═══════════════╬═════════════╣
║ 17 ║ Function Call ║ left-to-right ║ … ( … ) ║
║ ║ new (without argument list) ║ right-to-left ║ new … ║
╚════════════╩═════════════════════════════╩═══════════════╩═════════════╝
从本表中可以看出:
new Foo()
比 new Foo
new Foo()
具有与 .
操作者 new Foo
具有较低优先级的级别。 .
操作者 new Date().toString()
因为它的计算值为 (new Date()).toString()
new Date.toString()
抛出“ TypeError:Date.toString不是构造函数“因为 .
比 new Date
(并高于“函数调用”),表达式的计算结果为 (new (Date.toString))()
同样的逻辑可以应用于 … [ … ]
接线员。 new Foo
有 从右到左结合性 new Foo()
“联想性”不适用。我认为在实践中这没有任何区别。有关更多信息,请参见 这,这个 所以问题
一个比另一个更好吗?
new Foo()
TA贡献1840条经验 获得超5个赞
var someVar = myFunc; // this assigns the function myFunc to someVarvar someOtherVar = myFunc(); // this executes myFunc and assigns the returned value to someOtherVar
添加回答
举报