apply()和call()的區別


JavaScript中的每一個Function對象都有一個apply()方法和一個call()方法,
它們的語法分別為:
function.apply(thisObj, argArray)
function.call(thisObj, arg1, arg2,...argN);
apply:調用一個對象的一個方法,用另一個對象替換當前對象。例如:B.apply(A, arguments);即A對象應用B對象的方法。
call:調用一個對象的一個方法,用另一個對象替換當前對象。例如:B.call(A, args1,args2);即A對象調用B對象的方法。
它們的共同之處:
都“可以用來代替另一個對象調用一個方法,將一個函數的對象上下文從初始的上下文改變為由thisObj指定的新對象”。
它們的不同之處:
apply:最多只能有兩個參數——新this對象和一個數組argArray。如果給該方法傳遞多個參數,則把參數都寫進這個數組里面,當然,即使只有一個參數,也要寫進數組里。如果argArray不是一個有效的數組或arguments對象,那么將導致一個TypeError。如果沒有提供argArray和thisObj任何一個參數,那么Global對象將被用作thisObj,並且無法被傳遞任何參數。
call:它可以接受多個參數,第一個參數與apply一樣,后面則是一串參數列表。這個方法主要用在js對象各方法相互調用的時候,使當前this實例指針保持一致,或者在特殊情況下需要改變this指針。如果沒有提供thisObj參數,那么 Global 對象被用作thisObj。 
實際上,apply和call的功能是一樣的,只是傳入的參數列表形式不同。
function add(a,b){ return a+b; }
function sub(a,b){ return a-b; }
var a1 = add.apply(sub,[4,2]);  //sub調用add的方法
var a2 = sub.apply(add,[4,2]);
alert(a1); //6
alert(a2); //2
 
/*call的用法*/
var a1 = add.call(sub,4,2);

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM