一起养成写作习惯!这是我参与「掘金日新计划 · 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 实例化不起作用
参考资料
- 「干货」细说 call、apply 以及 bind 的区别和用法:segmentfault.com/a/119000001…
- 前端边角料 | 浅析 JavaScript 中 this 的理解:juejin.cn/post/704083…
-
- MDN-Function.prototype.call():developer.mozilla.org/zh-CN/docs/…
- MDN-Function.prototype.apply():developer.mozilla.org/zh-CN/docs/…
- MDN-Function.prototype.bind():developer.mozilla.org/zh-CN/docs/…
浏览知识共享许可协议
本作品采用知识共享署名-相同方式共享 4.0 国际许可协议进行许可。