三者都是用来改变this指向的。
var obj = {name: 'psg'};
function sum(num1,num2){
console.log(num1,num2);
console.log(this);
}
sum(1,2);//this:window,nm1:1,num2:2
1.call
函数.call(对象,arg1,arg2....)
sum.call(100, 200); //this指向100, num1=200, num2=undefined
sum.call(obj, 100, 200); //this指向obj, num1=100, num2=200
sum.call(); //this指向window,num1=undefined,num2=undefined
2.apply
函数.apply(对象,[arg1,arg2,...])
sum.apply();//非严格模式下,this指向window
//.apply(改变的指向,[参数1,参数2,...])
sum.apply(obj,[4,5]);//this指向obj,num1 =4,num2=5
sum.apply(obj);//this.指向obj,num1=undefined,num2=undefined
sum.apply([4,5]);//this.指向[4,5],num1=undefined,num2=undefined
3.bind
函数.bind(对象,arg1,arg2,....)()
注:bind返回的是一个函数体,并不会直接执行函数,所以后面要带个括号
sum.bind()();//this指向window,num1=undefined,num2=undefined
sum.bind(obj)();//this.指向obj,num1=undefined,num2=undefined
sum.bind(obj,1,2)();//this指向obj, num1=1, num2=2