js call()和apply()以及bind()的this指向问题
1、call()
call(改变的this的对象,参数1,参数2,......)
function fn(a,b,c){
console.log(this,a+b+c);
}
fn();//this window
var obj={a:1};
fn.call(obj);//将obj带入到函数替代函数中this的指向,原有的this会被指向obj
fn.call("5");
fn.call(obj,1,2,3);//第一个参数是函数中this指向的对象,后面会按顺序带入参数
2、apply()
apply(改变的this的对象,[ 数组参数])
fn.apply(obj,[1,2,3]);//apply只有两个参数,第一个参数是this指向的对象,第二个参数是函数所需的所有参数的数组,列表
** 如果call和apply带入不是对象,会自动转换为对象**
3、bind()
回调函数如果需要替换this,不能使用call和apply,这个时候就需要bind(),下面就是一个使用bind()的红绿灯问题。
var id;
function setLight() {
arguments[0](arguments[1], arguments[2]);
}
function showLight(fn,fn2){
clearTimeout(id);
console.log(this.toString());
id = setTimeout(fn, 2000, fn2, arguments.callee.bind(this));
}
setLight(showLight.bind("红"),showLight.bind("黄"),showLight.bind("绿"));
// 通过bind可以对于回调函数传参,this就是bind绑定的内容```