《javascript高级程序设计》括号包裹函数名

为什么第二部分的代码会报错呢?提示:object.getName(...) is not a function

var name = 'The Window'
var object = {
 name: 'My Object',
 getName: function() {
    return this.name
 }
}
console.log(object.getName()) // My Object
console.log((object.getName)()) // My Object
console.log((object.getName = object.getName)()) // The Window
var name = 'The Window'
var object = {
 name: 'My Object',
 getName: function() {
    console.log(this.name)
 }
}

object.getName()
(object.getName)() // 报错
(object.getName = object.getName)() // 报错
阅读 1.7k
1 个回答

分号。在每个语句后面都加上分号,js有ASI机制,最好不要省略;省略分号的后果就是语句等同于把换行去掉将三个语句并列调用:
object.getName()(object.getName)()...

object.getName()返回的是undefined,它不是一个函数所以报错了,如果你getName return一个函数就发现报错没了

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题