標籤:
call與apply
call和apply方法可以通過函數名稱來調用函數。有兩個參數
call()方法與apply()方法的作用相同,他們的區別僅在於接收參數的方式不同。
【call】
調用一個對象的一個方法,以另一個對象替換當前對象。
call()方法是與經典對象冒充方法最相似的方法。他的第一個參數用作this對象,其他參數都直接傳遞給函數自身。
對於call而言,第一個參數是內容物件,第二個參數是不同的函數參數。
call是通過參數列表來完成傳遞, 其他與apply沒有區別
【apply】
應用某一對象的一個方法,用另一個對象替換當前對象。
對於apply而言,有兩個參數,第一個是調用的上下文,第二個是參數數組,可以直接把argument傳進去。
【call與apply的用法與區別】
function sum(num1,num2){ return num1+num2;}function callSum1(num1,num2){ //使用sum這個函數來完成一次調用,調用的參數就是函數callSum1這個函數的參數 //apply的第二個參數代表一組參數數組 return sum.apply(this,argument);}function callSum2(num1,num2){ //第二個參數是數組 return sum.apply(this,[num1,num2]); }function callSum3(num1,num2){ //通過參數列表來完成傳遞 return sum.call(this,num1,num2);}
如果直接傳入argument對象,或者包含函數中先接收到的也是一個數組,那麼使用apply()方法比較方便,否則,選擇call()更加合適。如果在不給函數傳遞參數的情況下,使用哪個方法都可以。
call()與apply()真正強大的地方是能夠擴充函數賴以啟動並執行範圍。使用call()(或apply())來擴充範圍的最大好處,就是對象不需要與方法有任何耦合關係。
JavaScript(9)——call與apply