apply 和 call 的作用及区别

119 阅读1分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第6天,点击查看活动详情

核心描述

  • MDN 定义:
    • Function.prototype.apply: apply() 方法调用一个具有给定this值的函数,以及以一个数组(或类数组对象)的形式提供的参数。
    • Function.prototype.call:call() 方法使用一个指定的 this 值和单独给出的一个或多个参数来调用一个函数。
  • 核心作用:改变被调用方法的 this 指向。
  • 区别:
    • apply 第二个参数可以传入一个数组(快捷记忆,apply 字母开头是 a,类数组 arguments 开头字母也是 a,所以 apply 第二个参数跟数组有关)
    • call 第一个参数之后,接受的是参数列表

知识拓展

  • Function.prototype.bind:bind() 方法创建一个新的函数,在 bind() 被调用时,这个新函数的 this 被指定为 bind() 的第一个参数,而其余参数将作为新函数的参数,供调用时使用。
  • 区别:
    • apply 和 call 是直接调用的方式修改 this 指向
    • bind 是通过返回一个函数的方式修改 this 指向
  • 注意事项:
    • bind 对箭头函数不起作用
    • bind 对 new 实例化不起作用

参考资料

浏览知识共享许可协议

本作品采用知识共享署名-相同方式共享 4.0 国际许可协议进行许可。