1.call 和 apply传参的方式
var obj = {username: 'kobe'};
function foo(){
console.log(this);
}
foo();//此时foo的this指向的是最外层的window
var obj1 = {username: 'kobe'};
function foo1(){
console.log(this);
}
foo1.call(obj1);//这里foo1的this指向的是obj1
foo1.apply(obj1);//这里foo1的this指向的是obj1,没有传参钱call和apply用法是一样的
var obj2 = {username: 'kobe'};
function foo2(data){
console.log(this, data);
}
foo2.call(obj2,33); //直接从第二个参数开始依次传入
foo2.call(obj2,[33]);//apply传参传入的数据要放到数组里面
2.bind传参的方式
bind的特点:绑定完this不会立即调用当前函数,而是将函数返回bind传参的方式和call一样
var obj2 = {username: 'kobe'};
function foo2(data){
console.log(this, data);
}
//bind的特点:绑定完this不会立即调用当前函数,而是将函数返回
var bar = foo2.bind(obj2);
console.log(bar); //此时定义的bar是obj2,可以调用
bar();//打印出{usename: 'kobe'} undifined
//这里bar可以加括号调用,可以直接写成如下
foo2.bind(obj2, 33)();