apply|apply,call,bind

apply()方法:

Function.apply(obj,args)
【apply|apply,call,bind】obj:这个对象将代替Function类里this对象
args:这个是数组,它将作为参数传给Function(args-->arguments)
call()方法:
Function.call(obj,[param1[,param2[,…[,paramN]]]])
obj:这个对象将代替Function类里this对象
params:这个是一个参数列表
相同点与不同点

相同点:call和apply的作用都是改变函数体内部 this 的指向,也就是把Function(即this)绑定到obj,这时候obj具备了Function的属性和方法,说白一点就是obj继承了Function的属性和方法。
不同点: 接受参数的方式不太一样,apply接受的是数组参数,call接受的是连续参数。
demo1:
functionmul(a,b){returnthis+(a*b); }
console.log(mul.call(3,2,1));

console.log(mul.apply(2,[2,1])); //this指向第一个参数

demo2:利用apply找出数组最大值:
var a = [2,4,6,7]

console.log(Math.max.apply(null,a))

demo3:数组追加:
var array1=[ 1,2,3 ]
var array2=[ 4,5,6 ]
Array.prototype.push.apply(array1, array2)//array1=[ 1,2,3,4,5,6 ]


bind:也是可以改变函数体内 this 的指向。
当调用这个绑定函数时,绑定函数会以创建它时传入 bind()方法的第一个参数作为 this,传入 bind() 方法的第二个以及以后的参数加上绑定函数运行时本身的参数按照顺序作为原函数的参数来调用原函数。(在Javascript中,多次 bind() 是无效的。)
var bar =function(){console.log(this.x); }
var foo = { x:3 }
bar(); // undefined
varfunc = bar.bind(foo);
func(); // 3
bind 是返回对应函数,便于稍后调用;apply 、call 则是立即调用 。

    推荐阅读