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

来源:5-7 选择练习

weixin_慕的地5241954

2019-10-16 16:40:37

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

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

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


写回答

6回答

好帮手慕星星

2019-10-20

同学你好,

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

祝学习愉快!

0

好帮手慕糖

2019-10-19

同学你好,不是哦。

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

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

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



0
heixin_慕的地5241954
h 那就是var f = foo.call({id:1});对象{id:1}使用call方法调用foo,foo的this指向对象{id:1},而箭头函数没有this,所以剩下的三个对象使用call方法是无效的,调用他们的只能是对象{id:1},所以this指向{id:1},对吗?
h019-10-19
共1条回复

好帮手慕糖

2019-10-18

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

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

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

0
heixin_慕的地5241954
h 意思说定义var f = foo.call({id:1})时,相当于在foo内部定义了变量let id =1;?
h019-10-18
共1条回复

好帮手慕糖

2019-10-18

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

http://img.mukewang.com/climg/5da924bf0989066e02950108.jpg

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

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

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

0
heixin_慕的地5241954
h 后面传递的参数为什么没有用到呢?
h019-10-18
共1条回复

好帮手慕糖

2019-10-17

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

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

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

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


0
heixin_慕的地5241954
h 还是有点模糊,概念混淆。 1、foo.call({ id: 1 }),foo(){ this.id },为什么用这种形式传参和接受参数,而且传的是一个对象,call方法请详细讲解下它的用法。而不是用foo(1 ),foo(id){ id }这种方式? 2、后面传的参数为什么都没用了?
h019-10-17
共1条回复

好帮手慕糖

2019-10-16

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

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

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

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

0
heixin_慕的地5241954
h 明白了,{id:1}等就是对象,只有foo()函数一个this,但是这个this指向了4个对象,可以打印出4个不同的id值,对吗?
h019-10-17
共1条回复

0 学习 · 10739 问题

查看课程