JS函數(shù)的call和apply的實現(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方法的相同點
可以使得宿主(當前函數(shù)對象)在其自己作用域進行執(zhí)行,比如在第一個實例中,使用call和apply的第一個參數(shù)context(上下文),也可稱為this對象,傳遞給構(gòu)造函數(shù)A,此時this的作用域為當前構(gòu)造函數(shù)A下。
不同點
傳遞的參數(shù)不同,call第二個參數(shù)傳遞的可以是任何數(shù)據(jù)類型 函數(shù)、數(shù)組...,而apply傳遞的是必須是數(shù)組或者類數(shù)組。
兩個方法該如何選擇?
根據(jù)你要傳入的參數(shù)來做選擇,不需要傳參或者只有1個參數(shù)的時候,用call,當要傳入多個對象時,用apply
以上就是JS函數(shù)的call和apply的實現(xiàn)方法區(qū)別分析的詳細內(nèi)容,更多關(guān)于JS函數(shù)call apply方法的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
javascript實現(xiàn)動態(tài)時鐘的啟動和停止
這篇文章主要為大家詳細介紹了javascript實現(xiàn)動態(tài)時鐘的啟動和停止文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-10-10純JavaScript實現(xiàn)櫻花飄落效果的示例代碼
這篇文章主要為大家詳細介紹了如何純JavaScript實現(xiàn)櫻花飄落效果,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下2024-04-04JavaScript+html5 canvas繪制漸變區(qū)域完整實例
這篇文章主要介紹了JavaScript+html5 canvas繪制漸變區(qū)域的方法,結(jié)合完整實例形式分析了canvas顏色調(diào)用與圖形繪制的相關(guān)技巧,需要的朋友可以參考下2016-01-01javascript中alert()與console.log()的區(qū)別
我們在做js調(diào)試的時候使用 alert 可以顯示信息,調(diào)試程序,alert 彈出窗口會中斷程序, 如果要在循環(huán)中顯示信息,手點擊關(guān)閉窗口都累死。而且 alert 顯示對象永遠顯示為[object ]。 自己寫的 log 雖然可以顯示一些 object 信息,但很多功能支持都沒有 console 好2015-08-08js實現(xiàn)json數(shù)據(jù)行到列的轉(zhuǎn)換的實例代碼
為了實現(xiàn)這樣的數(shù)據(jù)顯示出來三個序列,分別為鄭州、新鄉(xiāng)、安陽的電量,就需要自己實現(xiàn)對這樣數(shù)據(jù)的轉(zhuǎn)換,轉(zhuǎn)換成如下的形式:2013-08-08inputSuggest文本框輸入時提示、自動完成效果(郵箱輸入自動補全插件)
inputSuggest在文本框輸入字符時提示,類似Windows的“自動完成”功能,當在文本框輸入字符時,與此相關(guān)的內(nèi)容會顯示在文本框的下邊,你可隨時使用鍵盤或鼠標點選那些提示,你就不用輸入了2012-05-05強大的JavaScript響應(yīng)式圖表Chartist.js的使用
本篇文章主要介紹了強大的JavaScript響應(yīng)式圖表Chartist.js的使用,具有一定的參考價值,有興趣的可以了解一下2017-09-09