当我们调用一个函数的时候,函数中的this一般是指向调用者的。但是我们其实可以在调用函数的时候,传入一个对象,让函数中的this指向我们传入的对象,而不是调用者本身。
apply,call,bind都是用来干这件事的,只是具体的用法不一样。
例:
1.调用没有参数的函数时候apply,call用法一样
var name = 'tom';
var obj = {name:'jack'};
function fun(){
console.log(this.name);
}
fun();
fun.call(obj);
fun.apply(obj);
输出:tom jack jack
2.调用有参数的函数的时候,apply和call传入参数的方式不一样
var name = 'tom';
var obj = {name:'jack'};
function fun1(age){
alert(this.name+age);
}
fun1(11);
fun1.call(obj,11);
fun1.apply(obj,[11]);
输出:tom11 jack11 jack11
3.bind的用法是返回this指向改变后的函数,而不是像apply和call一样直接调用。所以bind一般用于修改回调函数的this
var name = 'tom';
var obj = {name:'jack'};
function fun2(age){
alert('bind'+this.name+age);
}
var fun3 = fun2.bind(obj);
fun3(11);
输出:bindjack11