前端技术:call和apply的区别

今天给大家介绍call和apply的区别。先来看一段代码:

13211021-05018fcc0a9f469d.jpeg
image

运行结果是:

13211021-4a051d5493d352ff.jpeg
image

可以看到控制台中什么也没有输出,并不是我们想要的"翠花"。那到底是怎么回事呢?接下来我们在show函数中把this打印出来看看:

13211021-19cecfe514788af3.jpeg
image
13211021-decd14d3f31110e0.jpeg
image

可以看到此时函数中的this指向的是window对象,我们再看看window对象的name属性值:

13211021-b6808e4c35243855.jpeg
image

所以我们在控制台中看到的是空。其实我们的本意是输出obj这个对象中的name属性,也就是希望这个show()函数中的this指向obj这个对象。那怎么办呢?此时我们可以使用call或者apply。我们先来看:

  • 使用call:
13211021-1aa50115c78b68e9.jpeg
image
  • 使用apply:
13211021-37512bcd42491b08.jpeg
image

从上面的代码结果可以得到:apply、call功能是一样的,都是让函数调用,并且设置函数中this代表的对象。那它们有什么区别呢?接下来看看下面的代码:

13211021-6c3dabc4e588cf8e.jpeg
image

此时使用

  • call方式来调用:
13211021-429db053550ba349.jpeg
image
  • apply方式来调用:
13211021-3899021642e3f721.jpeg
image

总结:

1 call的语法:函数名.call(obj,参数1,参数2,参数3……);

2 apply的语法:函数名.apply(obj,[参数1,参数2,参数3……]);

这两个东西功能相同,就是把一个函数里面的this设置为某个对象,区别就是后面的参数的语法。call需要使用逗号分隔列出所有参数,但是apply是把所有参数写在数组里面。需要注意的是即使只有一个参数,也必须写在数组里面。

猜你喜欢

转载自blog.csdn.net/weixin_34192816/article/details/87030527