javascript中的apply、call

apply、call

在javascript中,apply、call都是為了改變某個(gè)函數(shù)的運(yùn)行上下文而存在的,換句話說(shuō),也就是為了改變函數(shù)體內(nèi)this的指向。
首先看一個(gè)例子

function fruits() {}
 
fruits.prototype = {
    color: "red",
    say: function() {
        console.log("My color is " + this.color);
    }
}
 
var apple = new fruits;
apple.say();             //My color is red

假如我們又有一個(gè)對(duì)象banana:{ color:"yellow"},我們不想對(duì)他重新定義say()方法,這時(shí)我們就可以引用apply或者call。

banana={
  color:"yellow"
}
apple.say.call(banana);    //My color is yellow
apple.say.apply(banana);   //My color is yellow

由以上代碼可以看出,原本不具有say方法的banana由于使用了apply、call方法后,改變了this的指向。

apply、call的區(qū)別

從作用上看,兩者作用完全一樣,都是為了改變函數(shù)體內(nèi)this的指向,唯一的區(qū)別就是兩者傳遞的參數(shù)不同,下面是一個(gè)函數(shù)的定義,

var func = function(arg1,arg2){
    
}

你可以通過(guò)如下的方法來(lái)調(diào)用

func.call(this,arg1,arg2);
func.apply(this,[arg1,arg2]);

其中,this指的是你要指定的上下文,call和apply的區(qū)別就是call是把參數(shù)按順序傳進(jìn)去,apply則傳入的是一個(gè)參數(shù)數(shù)組,有時(shí)候也可以直接傳入arguments對(duì)象。
接下來(lái)介紹一下call和apply的用法示例,以便更近一步的了解

  • 數(shù)組的追加
var array1 = [12 , "foo" , {name:"Joe"} , -2458]; 
var array2 = ["Doe" , 555 , 100]; 
Array.prototype.push.apply(array1, array2);  //輸出array1的值為[12,"foo",{name:"Joe"},-2458,"Doe",555,100]
  • 獲取數(shù)組中的最大值或最小值
var array = [-1245,96,788,35];
Math.max.apply(Math,array);     //結(jié)果為788

本來(lái)number沒(méi)有求解最大值最小值的方法,但Math有,通過(guò)apply將Math.max()方法應(yīng)用到數(shù)組上,大大為我們提供了方便。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • apply,call,bine 這三兄弟經(jīng)常讓初學(xué)者感到疑惑。前兩天準(zhǔn)備面試時(shí)特地做了個(gè)比較,其實(shí)理解起來(lái)也不會(huì)太...
    Zzz_CH閱讀 389評(píng)論 0 4
  • 第5章 引用類(lèi)型(返回首頁(yè)) 本章內(nèi)容 使用對(duì)象 創(chuàng)建并操作數(shù)組 理解基本的JavaScript類(lèi)型 使用基本類(lèi)型...
    大學(xué)一百閱讀 3,692評(píng)論 0 4
  • apply、call、bind apply call借用他人的函數(shù)方法 網(wǎng)上文章雖多,大多復(fù)制粘貼,且晦澀難懂,我...
    sponing閱讀 2,218評(píng)論 2 32
  • 這篇文章實(shí)在是很難下筆,因?yàn)榫W(wǎng)上相關(guān)文章不勝枚舉。巧合的是前些天看到阮老師的一篇文章的一句話:“對(duì)我來(lái)說(shuō),博客首先...
    MakingChoice閱讀 704評(píng)論 1 5
  • 本人真實(shí)經(jīng)歷,以此文祭奠我和她逝去的愛(ài)情,人物名字皆為化名! 我叫辰,她叫陽(yáng)!也許造化弄人,在我和我前...
    塵亟閱讀 377評(píng)論 4 0

友情鏈接更多精彩內(nèi)容