call()和apply()方法

call()和apply()是每個函數(shù)都包含的非繼承來的方法,其作用是在特定的作用域中調(diào)用函數(shù),call()和apply()方法的用法基本相同,區(qū)別僅僅在于參數(shù)的寫法上。

apply()方法

apply()方法包含兩個參數(shù),(this,argument)依次為 在其中運(yùn)行函數(shù)的作用域,參數(shù)集合,其中第二個參數(shù)可以為一個數(shù)組或者是arguments對象

    function sum(num1,num2){
        return num1+num2;
    }

    function apply(num1,num2){
        return sum.apply(this,arguments);
        return sum.apply(this,[num1,num2]); //兩種寫法都可以
    }

    console.log(apply(1,2));  //3

call()方法

apply()方法包含兩個參數(shù),(this,num1,num2,...)依次為 在其中運(yùn)行函數(shù)的作用域,需要一一列舉出來的參數(shù)集合,不同于apply()第二個參數(shù)以集合的方式呈現(xiàn),call()方法的第二個參數(shù)集合必須要一一列舉出來。

    function sum(num1,num2){
        return num1+num2;
    }

    function apply(num1,num2){
        return sum.apply(this,num1,num2);
       
    }

    console.log(apply(1,2));  //3

以上為apply()和call()的基本用法,兩種方法的區(qū)別僅僅在于參數(shù)呈現(xiàn)形式的不同,所以具體使用哪一種根據(jù)個人的使用習(xí)慣即可。事實(shí)上,傳遞參數(shù)并非這兩個方法的用武之處,可以改變或者擴(kuò)展函數(shù)運(yùn)行的作用域才是這兩個方法真正強(qiáng)大的地方,下面用一個簡單的例子來說明。

let a = {
   one:1,
   two:2
 }

 let o = {
   one:2,
   two:3
 }

  
 function sum(){
      return this.one+this.two;
 }

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

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

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