扫码关注官方订阅号
最近写的js也不少了,自认为对this关键字很了解了,但是
on my god,这是什么鬼?谁能给大白话在解释下,看不懂。
拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...
这其实没什么复杂的。
ES5中this的真谛在于——动态绑定上下文(context)对象。
也就是说, 跟函数的定义是没有任何关系的,只跟他运行时的状态有关。
你的问题中, getFullName这个变量是一个函数,又是prop对象的属性。这是对于这个问题来说我们最需要关注的两个点。至于前边那一连串调用,不过是为了得到pro对象而已。
getFullName函数第一次调用,是被prop对象,那this肯定就是prop无疑啦。
第二次调用,是它被赋值给了test变量,test变量是个全局变量, 实际可以看做是window对象的属性(但不全等)。 这样,就相当于是window.test().那他的this肯定就是window了。
如果说了这么多你还不懂,那你那句‘本以为’的确是挺‘本以为的’。不过要是不懂,说一声儿我还是会继续补充的, 直到你一点儿疑惑都没有。
简单地说就是谁调用的这个函数,this就指向谁。obj.prop.getFullname()调用函数的是obj.prop,所以返回的是prop的fullname然后var test = obj.prop.getFullname;test()就相当于是window.test()调用函数的是window,所以返回的是window的fullname
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
这其实没什么复杂的。
ES5中this的真谛在于——动态绑定上下文(context)对象。
也就是说, 跟函数的定义是没有任何关系的,只跟他运行时的状态有关。
你的问题中, getFullName这个变量是一个函数,又是prop对象的属性。这是对于这个问题来说我们最需要关注的两个点。至于前边那一连串调用,不过是为了得到pro对象而已。
getFullName函数第一次调用,是被prop对象,那this肯定就是prop无疑啦。
第二次调用,是它被赋值给了test变量,test变量是个全局变量, 实际可以看做是window对象的属性(但不全等)。 这样,就相当于是window.test().那他的this肯定就是window了。
如果说了这么多你还不懂,那你那句‘本以为’的确是挺‘本以为的’。不过要是不懂,说一声儿我还是会继续补充的, 直到你一点儿疑惑都没有。
简单地说就是谁调用的这个函数,this就指向谁。
obj.prop.getFullname()调用函数的是obj.prop,所以返回的是prop的fullname
然后var test = obj.prop.getFullname;
test()就相当于是window.test()调用函数的是window,所以返回的是window的fullname