call
、apply
和 bind
都是 Function.prototype
上的方法。javascript
Function.prototype.call
Function.prototype.apply
Function.prototype.bind
复制代码
call
、apply
都用于调用函数。java
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
的第二个以及以后参数都是传递给前面被调用函数的参数。不一样的是:app
apply
的参数是数组类型的。call
的参数是一组用逗号分隔的参数序列。你能够这样快捷的记忆。函数
apply
for Array,call
for Comma.ui
bind
接收的参数类型与 call
是同样的,给它传递的是一组用逗号分隔的参数列表。this
但与 call
不同的是:bind
方法返回一个全新的函数----这个全新的函数携带调用 bind
方法时,提供的上下文对象和参数。spa
bind
方法一般地使用场景是:将来的某个时间,在指定的一个上下文环境下,调用一个函数(这个函数就是以前用 bind
方法处理过,返回的函数)。prototype
(完)code