位置:首頁(yè) > 軟件操作教程 > 編程開(kāi)發(fā) > JavaScript > 問(wèn)題詳情

JavaScript 函數(shù) 使用 call 和 apply

提問(wèn)人:劉團(tuán)圓發(fā)布時(shí)間:2020-11-25

■知識(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ù)組或者偽類(lèi)數(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ù)無(wú)窮大的數(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(),用來(lái)計(jì)算所有參數(shù)中最大值參數(shù)。首先,通過(guò)apply方法,動(dòng)態(tài)調(diào)用max()函數(shù),然后,把它綁定為Object對(duì)象的一個(gè)方法,并把包含多個(gè)值的數(shù)組傳遞給它。最后,返回經(jīng)過(guò)max()計(jì)算后的最大數(shù)組元素。

    如果使用call方法,就需要把數(shù)組所有元素全部讀取出來(lái),再逐一傳遞給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)用不同類(lèi)型的方法。

繼續(xù)查找其他問(wèn)題的答案?

相關(guān)視頻回答
回復(fù)(0)
返回頂部