为了账号安全,请及时绑定邮箱和手机立即绑定

函数this指向

函数this指向

HUWWW 2019-03-22 16:15:37
在看高程不知道第几遍的时候,一直以为以前自己理解的东西,突然却懵逼了var name='thi window';var obj = {    name:'the obj',    getName:function(){        console.log(this);        console.log(this.name);    }}obj.getName();(obj.getName)();(obj.getName=obj.getName)();第三个输出的是打印the window测试过比如var ty;(ty = obj.getName)()//the window高程那边解释是先复制在执行,改变了this的指向,测试也确实是这么回事,如果直接调用执行this是obj的只要赋值在执行为撒指向就改变了呢?假如分开写的话能理解比如 var ty = obj.getName;ty();//the window这样写能理解,但是那个括号赋值并执行有点理解不过来啊,我也只能强制自己记住如果赋值在执行this就改变各位有更好的理解和看法吗?
查看完整描述

5 回答

?
ibeautiful

TA贡献1993条经验 获得超5个赞

这个怎么说呢? 
拿第一个和第三个比:
调用的时候,都是在window下执行的!!!都是在window下执行的!!!都是在window下执行的!!!
第一个 是window的obj的getName。。。。他从window跑到了obj对吧。他的爸爸是谁?是window的obj 对吧。
而第三个 赋值的时候。。window的obj的getName = window的obj的getName,赋值操作是先找到左边的obj的getName。。好了。貌似跑到了obj。。。但是他右边是谁是window的obj的getName...所又他要跑回window...
等号左侧的getName和 右侧的getName 不想等。 

https://img1.sycdn.imooc.com//5cac5715000150f305020177.jpg

所以共同的爸爸就是祖先window

查看完整回答
反对 回复 2019-04-09
?
隔江千里

TA贡献1906条经验 获得超10个赞

括号里面的表达式,返回值就是getName 函数,前一个括号返回,后一个括号执行,那么就相当于是自己执行的,而不是 obj 调用的。自己执行的 函数内 this 指向的是 window。


查看完整回答
反对 回复 2019-04-09
?
森栏

TA贡献1810条经验 获得超5个赞

查看完整回答
反对 回复 2019-04-09
  • 5 回答
  • 0 关注
  • 503 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信