call()、apply()、bind()都是改变函数中this指向的方法。
call() 、apply()可以看作是某个对象的方法,通过调用方法的形式来间接调用函数。bind() 就是将某个函数绑定到某个对象上。
1、call()
第一个参数是指定的对象;后续的所有参数都是传入函数的值
var obj = {};
function foo(a, b, c) {
console.log(this, b); //{}, 2 (this指向obj)
}
foo.call(obj, 1, 2, 3);
2、apply()
第一个参数是指定的对象;第二个参数是数组
var obj = {};
function foo(a, b, c) {
console.log(this, b); //{}, 2 (this指向obj)
}
foo.apply(obj, [1, 2, 3]);
3、bind()
bind()的用法和call()相同。
var obj = {};
function foo(a, b, c) {
console.log(this, b); //{}, 2 (this指向obj, fun()运行返回)
}
var fun = foo.bind(obj, 1, 2, 3);
fun();
bind() 方法和前两者不同在于: bind() 方法会返回执行上下文被改变的函数而不会立即执行,而前两者是直接执行该函数