call apply bind
box.onclick = function(){
function fn(){
alert(this);
}
fn(); //window.fn() this指向window
};
1 我们原本以为这里面的this指向的是box,然而却是Window。一般我们这样解决:
box.onclick = function(){
var _this = this; //box
function fn(){
alert(_this);
}
fn();
};
2 使用call, call立即执行
box.onclick = function(){
function fn(){
alert(this);
}
fn.call(this) //call(this)=call(box) call立即执行类似fn()
};
3 使用apply, apply立即执行
box.onclick = function(){
function fn(){
alert(this);
}
fn.apply(this) //apply(this)=apply(box) apply立即执行类似fn()
};
4 call与apply区别,传参时call挨个传, apply使用[]传
function fn(a,b,c,d){
console.log(a,b,c,d);
}
fn.call(null,1,2,3);
fn.apply(null,[1,2,3]);
5 bind调用该函数时才执行, 传参挨个传
var f = fn.bind(null,1,2,3);
f(4);
var objName = {name:'JS2016'};
var obj = {
name:'0 _ 0',
sayHello:function(){
console.log(this.name);
}.bind(objName) //不能立即执行
};
obj.sayHello();//JS2016