关于call和apply中,第一个参数指向问题

关于call和apply中,第一个参数指向问题


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

在13:25秒左右,an.showName.call(c,',');

视频中老师说,animal里的showName方法就交给cat去使用是什么意思,

我目前记住的方法,就是XX.call(a,b),a是谁,那么XX里this就是谁。

难道老师的意思是,当使用an.showName.call(c,',')后,可以临时看做 c 指向的函数为

function cat(){

    this.name = 'cat';

    this.showName = function(){

        alert(this.name);

    }

}

内部有一个animal的showName方法,这样showName里的this指向的就是c了,然后再调用c.showName(',);?

正在回答

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

2回答

同学你好,call,apply第一个参数的理解是对的。但是老师说的也没有错,就是通俗形象的给大家解释了一下,an是animal的实例化对象,所以an有name属性和showName方法。c是cat的实例化对象,它只有name属性。

调用an.showName()时,弹出“ani”。但是调用c.showName()时,就会报错。我们想要弹出“cat”,但是没有showName方法,所以就要和an去借这个方法。call就是帮助c去借an的showName方法。即调用an.showName时,让里面的this指向c。这样执行showName时,弹出的就是“cat”。所以不要太纠结这里哦~

另外,第二个参数是给方法内部传递使用的。代码中,showName中没有定义形参,这里我们可以去定义一下:


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

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

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

这个参数并不影响老师的解释,可以理解为,c去借用an的showName时,传入了c想要使用的实参。

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

提问者 学习plus 2020-05-31 13:27:09

我觉得call、apply只是单纯的改变this的指向吧,就是第一个参数填什么,调用call方法的变量内部的this,就指向什么,不是啥交给谁谁谁去使用,有点听不懂这句话啥意思

  • 提问者 学习plus #1
    不然call和apply后面的参数就没法解释了
    2020-05-31 13:27:37
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

0 星
2.组件化网页开发
  • 参与学习           人
  • 提交作业       1121    份
  • 解答问题       14456    个

本阶段在运用JS实现动态网页开发的基础上,带你深入理解企业开发核心思想,完成一个企业级网页的开发,体验前端工程师的成就感。

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

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