JS函數(shù)的call和apply的實(shí)現(xiàn)方法區(qū)別分析
方法示例
//apply用法 function A(alpha,age){ this.name = 'bob'; alert(alpha + arguments[1] + this.name) } (function(){ A.apply(this,['a',25]) })() //call方法 function B(alpha){ this.name = 'alice'; alert(alpha + this.name) } (function(){ B.call(this,'b') })() //普通函數(shù) function love(alpha){ this.name = 'alice'; alert(alpha + this.name) } (function(){ love.call(this,'love') })() //async函數(shù) async function create(alpha){ this.name = 'op'; var res = await compute(); alert(alpha + this.name + res) } (function(){ create.call(this,'b') })() //generator函數(shù) function * gen(num){ console.log(num); num ++; yield 'first' yield 'then' yield 'final' return num } (function(){ gen.call(this,0) })() let it = gen(3); console.log(it.next()) // {value: "first", done: false} console.log(it.next()) // {value: "then", done: false} console.log(it.next()) // {value: "final", done: false} console.log(it.next()) // {value: "4", done: true} function compute(){ var num = 0; for(let i = 0; i < 10 ; i++){//1+2+3+4+5+ ... + 9 =>(1+9)*9/2 = 45 num += i; } return num }
apply和call方法的相同點(diǎn)
可以使得宿主(當(dāng)前函數(shù)對(duì)象)在其自己作用域進(jìn)行執(zhí)行,比如在第一個(gè)實(shí)例中,使用call和apply的第一個(gè)參數(shù)context(上下文),也可稱(chēng)為this對(duì)象,傳遞給構(gòu)造函數(shù)A,此時(shí)this的作用域?yàn)楫?dāng)前構(gòu)造函數(shù)A下。
不同點(diǎn)
傳遞的參數(shù)不同,call第二個(gè)參數(shù)傳遞的可以是任何數(shù)據(jù)類(lèi)型 函數(shù)、數(shù)組...,而apply傳遞的是必須是數(shù)組或者類(lèi)數(shù)組。
兩個(gè)方法該如何選擇?
根據(jù)你要傳入的參數(shù)來(lái)做選擇,不需要傳參或者只有1個(gè)參數(shù)的時(shí)候,用call,當(dāng)要傳入多個(gè)對(duì)象時(shí),用apply
以上就是JS函數(shù)的call和apply的實(shí)現(xiàn)方法區(qū)別分析的詳細(xì)內(nèi)容,更多關(guān)于JS函數(shù)call apply方法的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
javascript實(shí)現(xiàn)動(dòng)態(tài)時(shí)鐘的啟動(dòng)和停止
這篇文章主要為大家詳細(xì)介紹了javascript實(shí)現(xiàn)動(dòng)態(tài)時(shí)鐘的啟動(dòng)和停止文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-10-10純JavaScript實(shí)現(xiàn)櫻花飄落效果的示例代碼
這篇文章主要為大家詳細(xì)介紹了如何純JavaScript實(shí)現(xiàn)櫻花飄落效果,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-04-04JavaScript+html5 canvas繪制漸變區(qū)域完整實(shí)例
這篇文章主要介紹了JavaScript+html5 canvas繪制漸變區(qū)域的方法,結(jié)合完整實(shí)例形式分析了canvas顏色調(diào)用與圖形繪制的相關(guān)技巧,需要的朋友可以參考下2016-01-01javascript中alert()與console.log()的區(qū)別
我們?cè)谧鰆s調(diào)試的時(shí)候使用 alert 可以顯示信息,調(diào)試程序,alert 彈出窗口會(huì)中斷程序, 如果要在循環(huán)中顯示信息,手點(diǎn)擊關(guān)閉窗口都累死。而且 alert 顯示對(duì)象永遠(yuǎn)顯示為[object ]。 自己寫(xiě)的 log 雖然可以顯示一些 object 信息,但很多功能支持都沒(méi)有 console 好2015-08-08整理關(guān)于Bootstrap過(guò)渡動(dòng)畫(huà)的慕課筆記
這篇文章主要為大家整理了關(guān)于Bootstrap動(dòng)畫(huà)過(guò)渡的慕課筆記,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-03-03js實(shí)現(xiàn)json數(shù)據(jù)行到列的轉(zhuǎn)換的實(shí)例代碼
為了實(shí)現(xiàn)這樣的數(shù)據(jù)顯示出來(lái)三個(gè)序列,分別為鄭州、新鄉(xiāng)、安陽(yáng)的電量,就需要自己實(shí)現(xiàn)對(duì)這樣數(shù)據(jù)的轉(zhuǎn)換,轉(zhuǎn)換成如下的形式:2013-08-08inputSuggest文本框輸入時(shí)提示、自動(dòng)完成效果(郵箱輸入自動(dòng)補(bǔ)全插件)
inputSuggest在文本框輸入字符時(shí)提示,類(lèi)似Windows的“自動(dòng)完成”功能,當(dāng)在文本框輸入字符時(shí),與此相關(guān)的內(nèi)容會(huì)顯示在文本框的下邊,你可隨時(shí)使用鍵盤(pán)或鼠標(biāo)點(diǎn)選那些提示,你就不用輸入了2012-05-05強(qiáng)大的JavaScript響應(yīng)式圖表Chartist.js的使用
本篇文章主要介紹了強(qiáng)大的JavaScript響應(yīng)式圖表Chartist.js的使用,具有一定的參考價(jià)值,有興趣的可以了解一下2017-09-09