JavaScript 函數(shù) 使用 call 和 apply
■知識點(diǎn)
call和apply是Function的原型方法,它們能夠?qū)⑻囟ê瘮?shù)當(dāng)作一個方法綁定到指定對象上,并進(jìn)行調(diào)用。具體用法如下:
function.call(thisobj, args...)
function.apply(thisobj, [args])
其中,function表示要調(diào)用的函數(shù)。參數(shù)thisobj表示綁定對象,即this指代的對象。參數(shù)args表示要傳遞給被調(diào)用函數(shù)的參數(shù)。call方法能接收多個參數(shù)列表,而apply方法只能接收一個數(shù)組或者偽類數(shù)組,數(shù)組元素將作為參數(shù)列表傳遞給被調(diào)用的函數(shù)。
■實(shí)例設(shè)計
【示例1】下面使用apply方法設(shè)計一個求最大值的函數(shù)。
function max(){ //求最大值函數(shù)
var m = Number.NEGATIVE INFINITY; //聲明一個負(fù)無窮大的數(shù)值
for( var i = 0; i < arguments.length; i ++ ){ //遍歷所有實(shí)參
if( arguments[i] > m ) //如果實(shí)參值大于變量m,
m = arguments[i]; //則把該實(shí)參值賦值給m
}
return m; //返回最大值
}
var a = [23, 45, 2, 46, 62, 45, 5.6, 63]; //聲明并初始化數(shù)組
var m = max.apply( Object, a ); //動態(tài)調(diào)用max,綁定為Object的方法
console.log( m ); //返回63
在上面的示例中,設(shè)計定義一個函數(shù)max(),用來計算所有參數(shù)中最大值參數(shù)。首先,通過apply方法,動態(tài)調(diào)用max()函數(shù),然后,把它綁定為Object對象的一個方法,并把包含多個值的數(shù)組傳遞給它。最后,返回經(jīng)過max()計算后的最大數(shù)組元素。
如果使用call方法,就需要把數(shù)組所有元素全部讀取出來,再逐一傳遞給call方法,顯然這種做法不是很方便。
【示例2】使用call和apply方法可以把一個函數(shù)轉(zhuǎn)換為指定對象的方法,并在這個對象上調(diào)用該方法。當(dāng)函數(shù)動態(tài)調(diào)用之后,這個對象的臨時方法也就不存在了。
function f() {
return "函數(shù) f";
}
var obj = { };
f.call( obj ); //把函數(shù)f綁定為obj對象的方法
console.log( obj.f()) //再次調(diào)用該方法,則返回編譯錯誤
■小結(jié)
call和apply方法的主要功能包括如下。
調(diào)用函數(shù)。
修改函數(shù)體內(nèi)的this指代對象。
為對象綁定方法。
跨越限制調(diào)用不同類型的方法。
點(diǎn)擊加載更多評論>>