1. call()
* call(this,a1,a2,a3,...)
* call方法,可以指定函数内部this的指向(即函数执行时所在的作用域),然后在所指定的作用域中,调用该函数。
call的第一个参数就是this所要指向的那个对象,后面的参数则是函数调用时所需的参数。
function add(a, b) {
return a + b;
}
add.call(this, 1, 2) // 3
例:
var n =111;
var x = { n: 222 };
function f() {
console.log(this.n);
}
f(x) //111
f.call(x) //222
2. apply
* 与call类似,改变this指向,再调用函数
* 区别: 接收一个数组作为函数执行时的参数
* func.apply(this,[a1,a2,a2,a3,...])
var a = { n: 2 };
function f(x,y) {
return x + y* this.n ;
}
f.call(a,1,2) //5
f.apply(a,[1,2]) // 5
3. bind()
* bind 方法用于将函数体内的 this 绑定到某个对象,然后返回一个新函数。
* bind 与 call 类似,接受参数相似。但是bind生成一个新函数,call直接调用
var add = function (x, y) {
return x * this.m + y * this.n;
}
var obj = {
m: 2,
n: 2
};
var xxx = add;
xxx.call(obj,1,2) //6
var yyy = add;
yyy.apply(obj,[1,2]) //6
var Add= add.bind(obj); //此时改变 this 指向了obj对象,生成一个函数
Add(1,2) //6