javascript中的apply、call

apply、call

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

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

假如我們又有一個對象banana:{ color:"yellow"},我們不想對他重新定義say()方法,這時我們就可以引用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ù)不同,下面是一個函數(shù)的定義,

var func = function(arg1,arg2){
    
}

你可以通過如下的方法來調(diào)用

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

其中,this指的是你要指定的上下文,call和apply的區(qū)別就是call是把參數(shù)按順序傳進去,apply則傳入的是一個參數(shù)數(shù)組,有時候也可以直接傳入arguments對象。
接下來介紹一下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

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

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

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

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

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