js对象问题?

clipboard.png

为什么第一次有(),第二次没有呢?

阅读 3.2k
8 个回答

谢邀。加括号表示执行函数,不加括号那就是一个 function 类型变量而已

第一个是执行函数,第二个是把函数赋值到变量上。不一样。

不然后面也不会有func(),执行函数了。

谢邀。这题的关键点是this对象的判定,简单的来说this指向的都是调用它的对象,第一次调用的对象是obj,返回的是objname,第二次调用this的是全局对象window,所以返回的是underfined,或者你可以再定义一个全局变量var name ="global" 就可以看到第二次返回的是"global"了(全局变量被当做全局对象的属性),以上。

obj.get();

此时调用get()方法的是obj这个对象,所以函数内this指向obj,所以this.name为obj.name="a"

var func=obj.get

看清楚了,这里是把obj的方法get屁股后面那截:function(){...}赋值给了func

等价于:

var func=function(){console.log(this.name)}

这就和obj没关系了,this指向window对象,this.name=window.name=undefined

第一次相当于直接执行了 obj 的 get 方法:打印出 name 属性,这里面的 this 指的就是 obj 本身,所以结果是 a;

第二次相当于是设置,这里面 this 指向的是全局对象 window,window 没有 name 属性,所以结果是 undefined。

var func=function(){
    console.log(this.name)
}

在 JavaScript 中,this 是指向函数执行时调用函数的对象。第一个是 obj 调用这个函数,第二个没有明确地调用对象,不过这种函数实际上是属于 window 的方法,所以调用者是 window。

加了()表示函数调用
不加()只表示了func是一个函数类型的变量而已

()代表立即执行

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