改变this的指向有三个方法
call
var a = {
user:"一颗会开花的树",
fn:function(){
console.log(this.user); //一颗会开花的树
}
}
var b = a.fn;
b.call(a);
call方法在使用时函数会立即执行,当然也可以传参
var a = {
user:"一颗会开花的树",
fn:function(e,x){
console.log(this.user); //一颗会开花的树
console.log(e+x); //3
}
}
var b = a.fn;
b.call(a,1,2);
apply
和call类似但传参时需要传入一个数组
var a = {
user:"一颗会开花的树",
fn:function(e,x){
console.log(this.user); //一颗会开花的树
console.log(e+x); //2
}
}
var b = a.fn;
b.apply(a,[1,1]);
如果call、apply传入的第一个参数是null那么指向的是window
bind
bind改变this的指向时不会立即调用函数,而是先返回一个修改过后的函数,需要另外调用才能执行。
传参时也可以等调用完毕之后再传入所需参数
var a = {
user:"一颗会开花的树",
fn:function(e,d,f){
console.log(this.user); //一颗会开花的树
console.log(e,d,f); //10 1 2
}
}
var b = a.fn;
var c = b.bind(a,10);
c(1,2);