粗略讲一下,希望大佬们能补充下。
首先这三个方法都是用来改变函数的 this 的绑定(指向)的。
它们的用法如下:
func.apply(thisArg, [argsArray])
fun.call(thisArg, arg1, arg2, ...)
function.bind(thisArg[, arg1[, arg2[, ...]]])
区别:
-
call 和 apply 的区别在于传参的形式不一样,apply 的参数形式是数组或类数组对象,call 的参数形式则是一个个排列的参数值;
-
bind 返回的是原函数的拷贝,并拥有指定的 this 值和初始参数;而 call 和 apply 都是直接返回原函数的返回值,或 undefined;即 bind 是需要手动去调用的,而 apply 和 call 都是立即自动执行。
实现 bind 方法可以参考 MDN bind polyfill
或者
const bind = (fn, context, ...boundArgs) => (...args) => fn.apply(context, [...boundArgs, ...args]);
网友评论