JS中的控制函数调用:call(),apply()和bind()

时间:2022-04-14 06:16:45

  所有的函数都具有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方法的讲解,自问无法超越不如授之渔也。