有两个问题关于this跟call

有两个问题关于this跟call

http://img1.sycdn.imooc.com//climg/5f1d2bf909f7d78711070750.jpg


首先 没明白为什么先要在 

 Msg.prototype._bind 这个函数 绑定 

 const _this = this;传入到

 const cancel =function(e)这个函数

第二  call()这里没看懂。我理解的是如果 a.call(b) 代表的意思是 吧 b传入a中

但是课程里这个

_this.cancel.call(_this,e)  没明白要怎么理解

正在回答

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

5回答

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

  1. _this.cancel 表示Msg中的cancel方法。

  2.  _this.cancel.call(_this,e)这句代码表示调用Msg中的cancel方法,改变_this.cancel方法中的this指向_this。

    由于_this.cancel方法中this已经指向了Msg,所以这里再使用call方法,功能确实有些重复,但不会发生冲突,代码可以正常运行。

  3. 因为本案例中_this.cancel方法中没有使用到this和e参数,所以可以去掉call方法,直接写成_this.cancel()对方法进行调用。示例:

    http://img1.sycdn.imooc.com//climg/5f1e434109f8a29708100153.jpg

祝学习愉快~

提问者 小杨同学呀 2020-07-27 10:25:04

http://img1.sycdn.imooc.com//climg/5f1e3a2d09d00d7c04280053.jpg

_this.cancel  指向的是 Msg中的cancel  

 _this.cancel  .call(_this,e) 等于就是 让Msg指向cancel 这不冲突吗?前者刚让Msg指向cancel,第二行又让cancel指向Msg????

好帮手慕慕子 2020-07-27 10:18:46

同学你好, call的第一个参数就是设置this的指向,这里就是让cancel方法中的this指向_this。这里传递的参数_this和e没有用上,可以不传。

祝学习愉快~

  • 提问者 小杨同学呀 #1
    老师看楼上我的新问题
    2020-07-27 10:25:18
提问者 小杨同学呀 2020-07-27 08:19:34

call中 e我能理解,但是e前面的的_this没明白

好帮手慕慕子 2020-07-26 17:38:16

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

  1. _bind方法中的this指向Msg实例化对象,所以const _this = this 这句代码是保存_bind方法中的this指向。

    为什么要在cancel方法中使用_this,如下所示,元素绑定的点击事件中调用cancel方法,该方法内部的this默认指向元素。可以打印下查看结果

    http://img1.sycdn.imooc.com//climg/5f1d4eac093e66a706580181.jpg

    http://img1.sycdn.imooc.com//climg/5f1d4eb80963257e08470102.jpg

    但是我们需要使用Msg实例化对象上cancel方法,所以要使用提前保存的_this

  2. 老师这里使用call方法改变cancel中的this指向,并将事件对象e作为参数传递过去,由于cancel中没有使用到this,所以这里加不加call方法改变this指向都是可以实现效果。

如果我的回答帮助到了你,欢迎采纳,祝学习愉快~

问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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