JavaScript中call和apply方法的區(qū)別實(shí)例分析
本文實(shí)例分析了JavaScript中call和apply方法的區(qū)別。分享給大家供大家參考,具體如下:
這兩個(gè)方法不經(jīng)常用,但是在某些特殊場(chǎng)合中是非常有用的,下面主要說(shuō)下它們的區(qū)別:
1、首先,JavaScript是一門(mén)面向?qū)ο蟮恼Z(yǔ)言,也就是說(shuō)它有this
的概念。而且JavaScript是一門(mén)動(dòng)態(tài)類(lèi)型語(yǔ)言,為什么說(shuō)它是動(dòng)態(tài)類(lèi)型語(yǔ)言呢?因?yàn)镴avaScript在編譯時(shí)沒(méi)有類(lèi)型檢查的過(guò)程,不會(huì)去檢查創(chuàng)建的對(duì)象類(lèi)型,也不會(huì)去檢查傳遞的參數(shù)類(lèi)型,所以它的變量類(lèi)型在運(yùn)行期間是可以改變的。
2、要知道call
和apply
都是為了改變某個(gè)函數(shù)運(yùn)行時(shí)的上下文(context)而存在的,也就是為了改變函數(shù),也可以說(shuō)是對(duì)象(函數(shù)本身就是對(duì)象)內(nèi)部this
的指向而存在的。
3、二者區(qū)別為:傳參數(shù)的方式不一樣,如下:
func.call(this, arg1, arg2); func.apply(this, [arg1, arg2]);
上面也很清楚了,call
傳參數(shù)時(shí),明確知道時(shí)幾個(gè)參數(shù)或者參數(shù)較少時(shí),比如arg1、arg2,挨個(gè)傳就是了;
而apply
第二個(gè)參數(shù)必須為一個(gè)數(shù)組,即將參數(shù)放進(jìn)數(shù)組中即可。
4、實(shí)例
(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; } })();
調(diào)用:
var cost_ = currying(cost); //將cost轉(zhuǎn)化成curring函數(shù) cost_(1); cost_(2); alert(cost_()); //輸出:3
解釋?zhuān)和ㄟ^(guò)currying
(柯里化)的轉(zhuǎn)化,在cost_
中傳入?yún)?shù)時(shí),未能得到值,而是將值存儲(chǔ)起來(lái),直到當(dāng)無(wú)參數(shù)傳入時(shí),輸出結(jié)果。
更多關(guān)于JavaScript相關(guān)內(nèi)容可查看本站專(zhuān)題:《JavaScript常用函數(shù)技巧匯總》、《javascript面向?qū)ο笕腴T(mén)教程》、《JavaScript錯(cuò)誤與調(diào)試技巧總結(jié)》、《JavaScript數(shù)據(jù)結(jié)構(gòu)與算法技巧總結(jié)》及《JavaScript數(shù)學(xué)運(yùn)算用法總結(jié)》
希望本文所述對(duì)大家JavaScript程序設(shè)計(jì)有所幫助。
- JS中call和apply函數(shù)用法實(shí)例分析
- JS中this的指向以及call、apply的作用
- 詳解JS中的this、apply、call、bind(經(jīng)典面試題)
- 詳解js中的apply與call的用法
- JavaScript中的apply()方法和call()方法使用介紹
- js中繼承的幾種用法總結(jié)(apply,call,prototype)
- JavaScript中的apply和call函數(shù)詳解
- javascript中apply和call方法的作用及區(qū)別說(shuō)明
- JS面向?qū)ο蟆rototype、call()、apply()
- JavaScript中apply與call的用法意義及區(qū)別說(shuō)明
- javascript下arguments,caller,callee,call,apply示例及理解
- JavaScript函數(shù)apply()和call()用法與異同分析
相關(guān)文章
JavaScript中用字面量創(chuàng)建對(duì)象介紹
這篇文章主要介紹了JavaScript中用字面量創(chuàng)建對(duì)象介紹,本文直接給出代碼實(shí)例,并講解了一些技巧,需要的朋友可以參考下2014-12-12Javascript基于jQuery UI實(shí)現(xiàn)選中區(qū)域拖拽效果
這篇文章主要介紹了Javascript基于jQuery UI實(shí)現(xiàn)選中區(qū)域拖拽效果的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-11-11JavaScript實(shí)現(xiàn)動(dòng)態(tài)生成表格
這篇文章主要為大家詳細(xì)介紹了JavaScript實(shí)現(xiàn)動(dòng)態(tài)生成表格,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-08-08JS實(shí)現(xiàn)“隱藏與顯示”功能(多種方法)
這篇文章主要介紹了JS實(shí)現(xiàn)“隱藏與顯示”功能的多種方法,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-11-11JS實(shí)現(xiàn)Tab欄切換的兩種方式案例詳解
這篇文章主要介紹了JS實(shí)現(xiàn)Tab欄切換的兩種方式,一種是面向過(guò)程的寫(xiě)法,一種是面向?qū)ο蟮膶?xiě)法,本文給大家分享詳細(xì)案例代碼,需要的朋友可以參考下2022-08-08記錄幾個(gè)javascript有關(guān)的小細(xì)節(jié)
記錄幾個(gè)javascript有關(guān)的小細(xì)節(jié)...2007-04-04javascript Error 對(duì)象 錯(cuò)誤處理
javascript常見(jiàn)error對(duì)象處理,錯(cuò)誤代碼集合2008-05-05一個(gè)簡(jiǎn)單的彈性返回頂部JS代碼實(shí)現(xiàn)介紹
頁(yè)面滾動(dòng)條處于低端,點(diǎn)擊回到頂部,并且隱藏掉,具體實(shí)現(xiàn)代碼如下,感興趣的朋友可以參考下哈2013-06-06