为什么第一次有(),第二次没有呢?
谢邀。这题的关键点是this对象的判定,简单的来说this指向的都是调用它的对象,第一次调用的对象是obj
,返回的是obj
的name
,第二次调用this
的是全局对象window
,所以返回的是underfined
,或者你可以再定义一个全局变量var name ="global"
就可以看到第二次返回的是"global"了(全局变量被当做全局对象的属性),以上。
obj.get();
此时调用get()方法的是obj这个对象,所以函数内this指向obj,所以this.name为obj.name="a"
var func=obj.get
等价于:
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。
10 回答11.2k 阅读
5 回答4.9k 阅读✓ 已解决
4 回答3.2k 阅读✓ 已解决
2 回答2.8k 阅读✓ 已解决
3 回答2.4k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
谢邀。加括号表示执行函数,不加括号那就是一个
function
类型变量而已。