相同点:

都能够改变方法的执行上下文(执行环境),将一个对象的方法交给另一个对象来执行,并且是立即执行

不同点:

call方法从第二个参数开始可以接收任意个参数,每个参数会映射到相应位置的func的参数上,可以通过参数名调用,但是如果将所有的参数作为数组传入,它们会作为一个整体映射到func对应的第一个参数上,之后参数都为空

列子:

function func (a, b, c) {};

func.call(obj, 1, 2, 3);
// function接收到的参数实际上是 1, 2, 3 func.call(obj, [1, 2, 3]);
// function接收到的参数实际上是 [1,2,3],undefined,undefined

apply方法最多只有两个参数,第二个参数接收数组或者类数组,但是都会被转换成类数组传入func中,并且会被映射到func对应的参数上

列子:

func.apply(obj, [1, 2, 3]);
// function 接收到的函数实际上是1, 2, 3 func.apply(obj, {
0: 1,
1: 2,
2: 3,
length: 3
});
// function接收到的参数实际上是 1, 2, 3

有的时候是不是和我一样 apply 和 call 在使用中不知所措,不知道用哪个?两个方法该如何选择是吧?

  很简单,根据你要传入的参数来做选择,不需要传参或者只有1个参数的时候,用call,当要传入多个对象时,用apply

或者,如果需要传入的参数已经是一个数组或者类数组了,就用apply,如果还是单独的需要逐个传入的,可以考虑使用call(如果你不嫌麻烦的话 )

最新文章

  1. 解决win7下PIL无法打开图片的问题
  2. 通过词法分析实现的指出C程序中包含的头文件
  3. div中文字水平和垂直居中的css代码
  4. andriod开发,简单的封装网络请求并监听返回.
  5. 九度OJ 朋友圈 -- 并查集
  6. servlet+jdbc+javabean其实跟ssh差不多
  7. dp 斯特林数 HDU2512一卡通大冒险
  8. HMM模型实例 mahout官网上的案例
  9. IT第十一天、第十二天、第十三天 - 数组的应用、飞行棋游戏的编写和总结
  10. css 单行文本居中显示,多行文本左对齐
  11. java虚拟机和java内存区域概述
  12. 使用机房的网线 连接到自己的电脑 解决Internet没有访问权限问题
  13. 在使用 Spring Boot 和 MyBatis 动态切换数据源时遇到的问题以及解决方法
  14. 利用maven的profiles灵活的配置多环境
  15. ActiveMA在CentOS7下的安装
  16. 2019.04.09 电商19 分析carmanage.py
  17. Centos7搭建软路由
  18. T-SQL 基础
  19. linux命令学习——cat
  20. 在Linux上rpm安装运行Redis 3.0.4

热门文章

  1. elasticsearch中query_string的隐藏坑
  2. 环境(8)Linux用户组权限
  3. PAT A1020——已知后序中序遍历求层序遍历
  4. [atARC124F]Chance Meeting
  5. [bzoj3351]Regions
  6. [uoj576]服务调度
  7. Python学习手册(第四版)——使用入门(自学用)
  8. 常见HTTP请求错误码
  9. Sql server 删除重复记录的SQL语句
  10. 架构师必备:巧用Canal实现异步、解耦的架构