call、apply 和 bind 都是 Function.prototype 上的方法。
Function.prototype.call
Function.prototype.apply
Function.prototype.bind
call 和 apply
call、apply 都用于调用函数。
function sayName(...args) {
console.log(`${this.name} 和其他参数 ${args}`);
};
let me = {
name: 'zhangbao'
};
// 1. 使用 apply
sayName.apply(me, [1, 2, 3]); // zhangbao 和其他参数 1,2,3
// 2. 使用 call
sayName.call(me, 1, 2, 3); // zhangbao 和其他参数 1,2,3
apply 和 call 的第一个参数都是指定被调用函数的上下文对象(Context)。
apply 的第二个参数、call 的第二个以及之后参数都是传递给前面被调用函数的参数。不同的是:
- 传递给
apply的参数是数组类型的。 - 传递给
call的参数是一组用逗号分隔的参数序列。
你可以这样快捷的记忆。
applyfor Array,callfor Comma.
bind
bind 接收的参数类型与 call 是一样的,给它传递的是一组用逗号分隔的参数列表。
但与 call 不一样的是:bind 方法返回一个全新的函数----这个全新的函数携带调用 bind 方法时,提供的上下文对象和参数。
bind 方法通常地使用场景是:未来的某个时间,在指定的一个上下文环境下,调用一个函数(这个函数就是之前用 bind 方法处理过,返回的函数)。
(完)