本文實例分析了JavaScript中call和apply方法的區(qū)別。分享給大家供大家參考,具體如下:
這兩個方法不經(jīng)常用,但是在某些特殊場合中是非常有用的,下面主要說下它們的區(qū)別:
1、首先,JavaScript是一門面向?qū)ο蟮恼Z言,也就是說它有this
的概念。而且JavaScript是一門動態(tài)類型語言,為什么說它是動態(tài)類型語言呢?因為JavaScript在編譯時沒有類型檢查的過程,不會去檢查創(chuàng)建的對象類型,也不會去檢查傳遞的參數(shù)類型,所以它的變量類型在運行期間是可以改變的。
2、要知道call
和apply
都是為了改變某個函數(shù)運行時的上下文(context)而存在的,也就是為了改變函數(shù),也可以說是對象(函數(shù)本身就是對象)內(nèi)部this
的指向而存在的。
3、二者區(qū)別為:傳參數(shù)的方式不一樣,如下:
func.call(this, arg1, arg2); func.apply(this, [arg1, arg2]);
上面也很清楚了,call
傳參數(shù)時,明確知道時幾個參數(shù)或者參數(shù)較少時,比如arg1、arg2,挨個傳就是了;
而apply
第二個參數(shù)必須為一個數(shù)組,即將參數(shù)放進數(shù)組中即可。
4、實例
(function(){ Array.prototype.push.call(arguments, 4);//arguments借用Array.prototype.push方法 console.log( arguments ); //
調(diào)用:
var cost_ = currying(cost); //將cost轉(zhuǎn)化成curring函數(shù) cost_(1); cost_(2); alert(cost_()); //
解釋:通過currying
(柯里化)的轉(zhuǎn)化,在cost_
中傳入?yún)?shù)時,未能得到值,而是將值存儲起來,直到當(dāng)無參數(shù)傳入時,輸出結(jié)果。
更多關(guān)于JavaScript相關(guān)內(nèi)容可查看本站專題:《JavaScript常用函數(shù)技巧匯總》、《javascript面向?qū)ο笕腴T教程》、《JavaScript錯誤與調(diào)試技巧總結(jié)》、《JavaScript數(shù)據(jù)結(jié)構(gòu)與算法技巧總結(jié)》及《JavaScript數(shù)學(xué)運算用法總結(jié)》
希望本文所述對大家JavaScript程序設(shè)計有所幫助。
聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com