前端技术:call和apply的区别

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

image

运行结果是:

image

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

image
image

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

image

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

  • 使用call:
image
  • 使用apply:
image

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

image

此时使用

  • call方式来调用:
image
  • apply方式来调用:
image

总结:

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

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

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

你可能感兴趣的:(前端技术:call和apply的区别)