call :调用函数,改变函数的this指向
第一个参数设置函数内部this的指向
其他参数对应函数的参数
call的返回值就是函数的返回值
如下:
将一个对象的方法应用到另一个对象
var obj = {
sum:function(a,b){
return a+b;
}
}
var jbj = {
a:12,
b:14
}
此时如果我想计算jbj对象的两个属性之和,但又不想在写代码这时候就可以直接应用obj的方法
var res = obj.sum.call(jbj,jbj.a,jbj.b);
console.log(res);
结果输出26
2.apply 调用函数,改变this
第一个参数设置函数内部this的指向
第二个参数传递数组的话会将数组中的每一项返回给apply前面的方法
如求数组的最大值我们可以借助Math.max
var arr = [1,2,3];
var res = Math.max.apply(arr,arr);
console.log(res);//返回3
3.bind 改变this的指向
bind也可以改变this的指向,不同的是bind不会调用方法,而是复制对象方法
如
var obj {
name:'zs',
fun:function(){
setInterval(function(){
console.log(this.name)//此时不会打印name值
// 因为此时this指向的是定时器的函数,定时器里面的函数没有name
//我们需使其指向obj即可
}.bind(this),2000)
}
}