请问一下老师这里没懂

请问一下老师这里没懂

let self=this

const hideMsg=function () {

el.style.transform ='translate(-50%, -50%) scale(0, 0)';

overlay.style.opacity = 0;

setTimeout(function () {

document.body.removeChild(el)

document.body.removeChild(overlay)

},300)

};

const cancel=function () {

self.cancel();

hideMsg();

};

const confirm=function () {

self.confirm();

hideMsg();

};

既然都指定了_this  就和我这里的self 一样  为什么还要用call 去指定this的值?

正在回答

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

2回答

同学你好,call方法第一个参数是调用call方法的函数中的this 的指向对象,第二个参数表示传入调用call方法的函数中的参数。

e表示的是事件对象,但是两个cancel并不是同一个方法,如下图所示

外面的cancel对应点击事件中的方法,在这个方法内部的默认有事件对象e

内部cancel表示实例化时传入的方法,该方法内部默认是没有事件对象e, 如果要使用,需要单独传递

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

同学可以试着理解下,祝学习愉快~

好帮手慕慕子 2020-07-27 19:10:07

同学你好,理解是对的, _this.cancel.call(_this,e)这句代码表示调用Msg中的cancel方法,改变_this.cancel方法中的this指向_this。但是由于使用_this.cancel方式调用时,方法内部的this已经指向了实例化对象Msg,所以这里用不用call方法都可以的。

因为本案例中_this.cancel方法中没有使用到this和e参数,所以同学自己练习时,完全可以去掉call方法,直接写成_this.cancel()对方法进行调用就可以了。示例:

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

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

  • 提问者 宝慕林4466778 #1
    老师 能回答我一下call第一个参数和第二个参数分别代表什么吗? 第一个我知道是对前面调用call方法函数this的指向 第二个是什么 为什么可以传个e 这个e不是事件对象吗?
    2020-07-27 19:13:27
  • 提问者 宝慕林4466778 #2
    _this.cancel&&_this.cancel.call(this,e) 而且照理说 如果要这样写。。。call里面的this 不应该传 this吗 不是_this吧 虽然多此一举 但逻辑上应该是这样
    2020-07-27 19:17:59
  • 提问者 宝慕林4466778 #3
    不好意思 理解错了 这个问题忽略掉XD
    2020-07-27 19:19:12
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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