apply()與call()的區(qū)別

它們各自的定義:

apply:調(diào)用一個對象的一個方法,用另一個對象替換當(dāng)前對象。例如:B.apply(A, arguments);即A對象應(yīng)用B對象的方法。

call:調(diào)用一個對象的一個方法,用另一個對象替換當(dāng)前對象。例如:B.call(A, args1,args2);即A對象調(diào)用B對象的方法。

它們的共同之處:

都“可以用來代替另一個對象調(diào)用一個方法,將一個函數(shù)的對象上下文從初始的上下文改變?yōu)橛蓆hisObj指定的新對象”。

它們的不同之處:

apply:最多只能有兩個參數(shù)——新this對象和一個數(shù)組argArray。如果給該方法傳遞多個參數(shù),則把參數(shù)都寫進(jìn)這個數(shù)組里面,當(dāng)然,即使只有一個參數(shù),也要寫進(jìn)數(shù)組里。如果argArray不是一個有效的數(shù)組或arguments對象,那么將導(dǎo)致一個TypeError。如果沒有提供argArray和thisObj任何一個參數(shù),那么Global對象將被用作thisObj,并且無法被傳遞任何參數(shù)。

call:它可以接受多個參數(shù),第一個參數(shù)與apply一樣,后面則是一串參數(shù)列表。這個方法主要用在js對象各方法相互調(diào)用的時候,使當(dāng)前this實例指針保持一致,或者在特殊情況下需要改變this指針。如果沒有提供thisObj參數(shù),那么 Global 對象被用作thisObj。

實際上,apply和call的功能是一樣的,只是傳入的參數(shù)列表形式不同。

重點

改變執(zhí)行上下文?
重新this指向?

?著作權(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()的具體使用原理,今日閑來無事,決定好好研究一番。 JavaScript中...
    AKZhang閱讀 373評論 0 0
  • 第5章 引用類型(返回首頁) 本章內(nèi)容 使用對象 創(chuàng)建并操作數(shù)組 理解基本的JavaScript類型 使用基本類型...
    大學(xué)一百閱讀 3,689評論 0 4
  • 昨天在做面試題時遇到了這道題: 下面有關(guān)JavaScript中 call和apply的描述,錯誤的是? A. ca...
    熒惑3_3閱讀 700評論 0 1
  • 大家好,我是IT修真院萌新分院第3期的學(xué)員張曉琳,一枚正直、純潔、善良的前端程序員今天給大家分享一下,修真院官網(wǎng)j...
    Demon_0481閱讀 643評論 0 2
  • Some Puzzle when learn c++ 1. why we should put typedef a...
    糖不挑先生閱讀 1,027評論 0 0

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