所有的函數都具有call(),apply()和bind()方法。它們可以在執行方法的時候用一個值指向this,並改變面向對象的作用域。 apply方法: 以下的兩種表達式是等價的: func(arg1,arg2,arg3) func.apply(null,[arg1,arg2,arg3]) appl ...
所有的函數都具有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方法的講解,自問無法超越不如授之漁也。