【第8周 面向对象 3-10 call apply】这里的this为什么指向的是fun1而不是fun2?

【第8周 面向对象 3-10 call apply】这里的this为什么指向的是fun1而不是fun2?

问题描述:

老师关于这里的this还是有点模糊,麻烦看下我理解的是否正确:


Q1:因为fun1(33,44)调用之后,符合上下文规则2,所以是fun1的上下文winodw?

       是否可以理解为,谁在最后面调用了( funX(33,44) ),这里的this就指谁?

        fun2(33,44),这里的this指fun2的上下文?

        fun3(33,44),this就指的fun3?  

        能否这样去记忆规律?


Q2:如果去掉fun1(33,44),是否这里的this就没有实际的意义?

        写个全局变量var a = 33,b=44也是无法获得结果?


相关截图:

https://img1.sycdn.imooc.com//climg/61b1c2f509014ba910500798.jpg

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
好帮手慕慕子 2021-12-09 17:13:40

同学你好,对于你的问题解答如下:

1、因为截图代码中,是将fun1函数中的this作为参数传入apply方法,所以这个this指向的是fun1的上下文。

代码中是通过aplly方法调用fun2的, 所以fun2函数内部的的this指向传入apply方法中的第一个参数,即:fun1的上下文

2、fun1(33,44)调用之后,符合上下文规则2,所以是fun1的上下文winodw 这句话理解是对的。

不要以下图这样的方式去记忆,可以记住一句话:默认情况下,谁调用了该函数,函数内部的this就指向谁

https://img1.sycdn.imooc.com//climg/61b1c71b099a1af105130176.jpg

3、如果去掉fun1(33, 44)这句代码,那么,fun内部的代码并不会执行,所以此时不管是this还是全局变量a和b都没有意义了

祝学习愉快~



  • 提问者 easyschen #1

    老师麻烦再打扰下:我太笨了,确实没太懂。

    其他都明白,arguments是33、44;fun1的上下文是window;

    我就是不明白这里的this,为什么是视频中说的,“fun1的上下文传进去”?

    就是传是怎么传的?this在fun1函数内部,是不是就是等于fun1?就是this为啥代表fun1上下文? 

    我有点转不过来弯


    https://img1.sycdn.imooc.com//climg/61b1ce0c09c1fcfe12080070.jpg

    https://img1.sycdn.imooc.com//climg/61b1cfd50935b31b14000070.jpg

    https://img1.sycdn.imooc.com//climg/61b1d2c80943bd1016000346.jpg

    https://img1.sycdn.imooc.com//climg/61b1d538099aac4a15860476.jpg



    2021-12-09 18:07:36
  • 好帮手慕慕子 回复 提问者 easyschen #2

    同学你好,对于你的问题解答如下:

    1、“fun1的上下文传进去”这个的上下文就可以理解为是this, 通过apply方法调用fun2时传入的。

    老师在上一条回答中也解释了,fun2函数内部的的this指向传入apply方法中的第一个参数,即:fun1的上下文(也就是同学截图中的this)

    2、可以简单理解为是语法的规定,this表示fun1的上下文,而不是等于fun1.

    祝学习愉快~

    2021-12-09 18:22:12
  • 提问者 easyschen 回复 好帮手慕慕子 #3

    好的,感谢老师,麻烦了。我多去学习下



    2021-12-09 18:28:24
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师