所有的函数都具有call(),apply()和bind()方法。它们可以在执行方法的时候用一个值指向this,并改变面向对象的作用域。
apply方法:
以下的两种表达式是等价的:
func(arg1,arg2,arg3)
func.apply(null,[arg1,arg2,arg3])
apply()往往用在一个函数需要以数组的是形式接受多个参数时使用。
使用Math.max()来获得一个数组中最大的元素:
Math.max.apply(null,[17,33,21]);
call方法:
表达式:call([thisObj[,arg1[, arg2[, [,.argN]]]]])
定义:调用一个对象的一个方法,以另一个对象替换当前对象。
说明:call()可以实现多种功能,如1.将原本属于Animal对象的showName()方法交给另一个对象cat来使用;2.实现继承(单重继承,多重继承)3.将一个函数替换另一个函数。
bind方法:
http://www.zhangxinxu.com/wordpress/2012/10/ecmascript-es5-bind-array-slice-call-apply/ 是我看过的最全面、最有意思的关于bind方法的讲解,自问无法超越不如授之渔也。