bind方法和this的指向
函数A调用bind(),会在该函数的基础上建立一个新的函数;新函数其实就是就原函数,只是给函数起了个新的名字;
传入bind()的第一个参数就是新函数的this;新函数的执行顺序和原函数一样,bind()的第一个参数只是改变了新函数中this的指向;bind()后的第2个及之后的参数在调用新函数时作为实参给新函数传参
var A = {
name:"小a在唱歌" ,
feng:function(){
console.log(this.name);
}
}
A.feng(); //执行结果是:小a在唱歌
var B = {
name:"小b在唱歌"
}
var C = A.feng.bind(B);//此时,新函数C中的this指向对象B;
console.log(C); //此时C就是 A对象中的feng:function(){ console.log(this.name);}
C(); //执行函数C,并输出函数B的name;执行结果是:小b在唱歌
// 定时器中this的改变
var obj = {
name:"admin",
show:function(){
demo.bind(this);//此时this指向object
setTimeout(demo.bind(this),1000)//此时this(object)作为新函数的第一个参数,即新函数this的指向是object
}
}
function demo(){
console.log(this)
}
obj.show();//输出结果为object