函数扩展箭头函数 5-7选择练习1单选题

函数扩展箭头函数 5-7选择练习1单选题

1、call(this, fn)方法第一个参数是对象,第二个参数是方法,{id:1}是对象啊,难道能传第三个参数对象吗?还是说对象是fn方法里面的参数?

2、call方法第一个参数不设置,默认是this对象,也就是它本身。那么foo()调用是window对象调用的,

foo.call()调用是foo函数本身调用,foo是函数,不是对象,它如何调用自己呢?


正在回答

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

6回答

同学你好,

这样理解是可以的,没有问题,很棒哦!

祝学习愉快!

好帮手慕糖 2019-10-19 12:02:52

同学你好,不是哦。

这里是改变了this指向,指向了一个对象{id:1},不是指向原来foo的作用域对象了。

所以才输出新的对象中的id,且id为1;

希望能帮助到你,祝学习愉快!



  • 那就是var f = foo.call({id:1});对象{id:1}使用call方法调用foo,foo的this指向对象{id:1},而箭头函数没有this,所以剩下的三个对象使用call方法是无效的,调用他们的只能是对象{id:1},所以this指向{id:1},对吗?
    2019-10-19 22:51:02
好帮手慕糖 2019-10-18 19:13:35

同学你好,因为我们这个访问的是this.id,是this指向的对象上的id,而this指向的是foo这个对象,所以访问的都是这个id,其他的id都没使用到哦。

这里稍微有点绕,同学可以根据之前的回答,结合代码在梳理下哦。

希望能帮助到你,祝学习愉快!

  • 意思说定义var f = foo.call({id:1})时,相当于在foo内部定义了变量let id =1;?
    2019-10-18 19:42:32
好帮手慕糖 2019-10-18 10:37:33

同学你好,1、也可以如下形式传递,这里是直接写的对象,没有使用变量接收,可以先使用变量接收在传递也是可以的,例:

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

且第一个参数都是 this 的指向对象,本身就是一个对象哦,我们这里是将this执行了{ id: 1 },按照如上写法就是执行对象obj。

2、是的,后面传递的参数没有用到。

希望能帮助到你,祝学习愉快!

好帮手慕糖 2019-10-17 09:50:41

同学你好,1、不是哦,只有一个this,是表示这几个this指向的是同一个对象,就是外层的foo。

2、既然都指向foo,那么输出的id也是这里的id,是1。所以t1、t2、t3都输出同样的结果。且是3个,不是4个哦。

3、var f = foo.call({ id: 1 })这一步,只是调用了外层的函数,里面的没调用,无法输出的。

希望能帮助到你,祝学习愉快!


  • 还是有点模糊,概念混淆。 1、foo.call({ id: 1 }),foo(){ this.id },为什么用这种形式传参和接受参数,而且传的是一个对象,call方法请详细讲解下它的用法。而不是用foo(1 ),foo(id){ id }这种方式? 2、后面传的参数为什么都没用了?
    2019-10-17 19:51:50
好帮手慕糖 2019-10-16 17:53:57

同学你好,1、第一个参数是对象,这里的{id:1}对象就是第一个参数哦。没有第二个参数。

2、不是第一个是this对象哦,而是this指向的是谁,这个对象是谁。

代码中this原本指向的是foo,但是call方法中传入了新的对象,this指向的就是传入的对象{id:1}

希望能帮助到你,祝学习愉快!

  • 明白了,{id:1}等就是对象,只有foo()函数一个this,但是这个this指向了4个对象,可以打印出4个不同的id值,对吗?
    2019-10-17 07:06:33
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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