1、call
var foo = {
user: "liyongfen",
getUser: function(){
console.log(this.user);
}
}
var bar = foo.getUser;
bar();//undefine
foo.getUser();//liyongfen
this没有指向foo中的user
var foo = {
user: "liyongfen",
getUser: function(a,b){
console.log(a+b);
console.log(this.user);
}
}
var bar = foo.getUser;
bar.call(foo,1,3);//4 liyongfen
foo.getUser(5,6);//11 liyongfen
call第一个参数改变this的指向,后面的参数是对应getUser中参数
2、apply
var foo = {
user: "liyongfen",
getUser: function(a,b){
console.log(a+b);
console.log(this.user);
}
}
var bar = foo.getUser;
bar.call(foo,[1,3]);//4 liyongfen
foo.getUser(5,6);//11 liyongfen
apply里的第一个参数指定this的指向,第二个参数是数组。当第一个参数为null时,this指向window,call也一样
3、bind
var foo = {
user: "liyongfen",
getUser: function(a,b){
console.log(this);
console.log(a+b);
console.log(this.user);
}
}
var bar = foo.getUser;
var c = bar.bind(foo);
c(4,8);//foo函数 12 liyongfen
bind绑定this后没有立即执行,到想要运行是,再调用