您好,登錄后才能下訂單哦!
本文實例分析了JavaScript中call和apply方法的區別。分享給大家供大家參考,具體如下:
這兩個方法不經常用,但是在某些特殊場合中是非常有用的,下面主要說下它們的區別:
1、首先,JavaScript是一門面向對象的語言,也就是說它有this
的概念。而且JavaScript是一門動態類型語言,為什么說它是動態類型語言呢?因為JavaScript在編譯時沒有類型檢查的過程,不會去檢查創建的對象類型,也不會去檢查傳遞的參數類型,所以它的變量類型在運行期間是可以改變的。
2、要知道call
和apply
都是為了改變某個函數運行時的上下文(context)而存在的,也就是為了改變函數,也可以說是對象(函數本身就是對象)內部this
的指向而存在的。
3、二者區別為:傳參數的方式不一樣,如下:
func.call(this, arg1, arg2); func.apply(this, [arg1, arg2]);
上面也很清楚了,call
傳參數時,明確知道時幾個參數或者參數較少時,比如arg1、arg2,挨個傳就是了;
而apply
第二個參數必須為一個數組,即將參數放進數組中即可。
4、實例
(function(){ Array.prototype.push.call(arguments, 4);//arguments借用Array.prototype.push方法 console.log( arguments ); //輸出: [1, 2, 3, 4] })(1, 2, 3); var currying = function(fn){ var args = []; return function(){ if( arguments.length === 0){ return fn.apply( this, args); } else{ [].push.apply( args, arguments); return arguments.callee; //callee已棄用 } } }; var cost = (function(){ var money = 0; return function(0{ for(var i = 0,l - arguments.length;i<l;i++){ money += arguments[i]; } return money; } })();
調用:
var cost_ = currying(cost); //將cost轉化成curring函數 cost_(1); cost_(2); alert(cost_()); //輸出:3
解釋:通過currying
(柯里化)的轉化,在cost_
中傳入參數時,未能得到值,而是將值存儲起來,直到當無參數傳入時,輸出結果。
更多關于JavaScript相關內容可查看本站專題:《JavaScript常用函數技巧匯總》、《javascript面向對象入門教程》、《JavaScript錯誤與調試技巧總結》、《JavaScript數據結構與算法技巧總結》及《JavaScript數學運算用法總結》
希望本文所述對大家JavaScript程序設計有所幫助。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。