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