在JavaScript中,call()方法和apply()方法的作用相同,差別在於接收參數的方式不同;在使用call()方法時,傳遞給函數的參數必須逐一列舉出來,使用apply()時,傳遞給函數的是參數陣列。
本教學操作環境:windows10系統、javascript1.8.5版、Dell G3電腦。
javascript中call和apply有什麼區別
call() 方法呼叫一個函數, 其具有一個指定的this值和分別地提供的參數(參數的列表)。
注意:此方法的作用和apply() 方法類似,只有一個區別,就是call()方法接受的是若干個參數的列表,而apply()方法接受的是一個包含多個參數的數組。
語法
fun.call(thisObj[, arg1[, arg2[, ...]]])
定義:呼叫一個物件的一個方法,以另一個物件取代目前物件。
說明:
call 方法可以用來取代另一個物件呼叫一個方法。 call 方法可將一個函數的物件上下文從初始的上下文變更為由 thisObj 指定的新物件。
如果沒有提供 thisObj 參數,那麼 Global 物件被用作 thisObj。
參數
thisObj
在fun函數執行時指定的this值。需要注意的是,指定的this值不一定是該函數執行時真正的this值,如果這個函數處於非嚴格模式下,則指定為null和undefined的
this值會自動指向全局物件(瀏覽器中就是window物件),同時值為原始值(數字,字串,布林值)的this會指向該原始值的自動包裝物件。
arg1, arg2, ...
# 指定的參數清單。
傳回值
傳回結果包括指定的this值和參數。
apply()
apply() 方法呼叫一個函數, 其具有一個指定的this值,以及作為一個數組(或類似數組的物件)提供的參數。
語法
fun.apply(thisObj, [argsArray])
定義:應用某一物件的一個方法,用另一個物件取代目前物件。
說明:
如果 argsArray 不是一個有效的陣列或不是 arguments 對象,那麼將導致一個 TypeError。
如果沒有提供 argArray 和 thisObj 任何一個參數,那麼 Global 物件將被用作 thisObj, 並且無法傳遞任何參數。
參數
thisObj
在 fun 函數執行時指定的 this 值。需要注意的是,指定的this 值不一定是該函數執行時真正的this 值,如果這個函數處於非嚴格模式下,則指定
為null 或undefined 時會自動指向全域物件(瀏覽器中就是window物件),同時值為原始值(數字,字串,布林值)的this 會指向該原始值的自動包裝物件。
argsArray
一個陣列或類別陣列對象,其中的陣列元素將作為單獨的參數傳給 fun 函數。如果該參數的值為null 或 undefined,則表示不需要傳入任何參數。從ECMAScript 5
開始可以使用類別數組物件。
總結
兩者作用一致,都是把obj(即this)綁定到thisObj,這時候thisObj具備了obj的屬性和方法。或者說thisObj『繼承』了obj的屬性和方法。
唯一差異是apply接受的是陣列參數,call接受的是連續參數。
call()方法和apply()方法的作用相同,他們的差異在於接收參數的方式不同。對於call(),第一個參數是this值沒有變化,變化的是其餘參數都直接傳遞給函數。 (使用call()方法時,傳遞給函數的參數必須逐一列舉。使用apply()時,傳遞給函數的是參數數組)如下程式碼做出解釋:
function add(c, d){ return this.a + this.b + c + d; } var o = {a:1, b:3}; add.call(o, 5, 7); // 1 + 3 + 5 + 7 = 16 add.apply(o, [10, 20]); // 1 + 3 + 10 + 20 = 34
call 和apply 都是為了改變某個函數執行時期的context 即上下文而存在的,換句話說,就是為了改變函數體內部this 的指向。因為 JavaScript 的函數存在著「定義時的上下文」和「執行時期的上下文」以及「上下文可以改變」。
二者的作用完全一樣,只是接受參數的方式不太一樣。例如,有一個函數 fun 定義如下:
var fun = function(arg1, arg2) {};
就可以透過 fun.call(this, arg1, arg2); 或 fun.apply(this, [arg1, arg2]); 來呼叫。其中 this 是你想要指定的上下文,他可以任何一個 JavaScript 物件(JavaScript 中一切皆物件),call 需要把參數依序傳遞進去,而 apply 則是把參數放在陣列裡。
在JavaScript 中,某個函數的參數數量是不固定的,因此要說適用條件的話,當你的參數是明確知道數量時,用call,而不確定的時候,用apply,然後把參數push進數組傳遞進去。當參數數量不確定時,函數內部也可以透過 arguments 這個陣列來遍歷所有的參數。
相關推薦:javascript學習教學
以上是javascript中call和apply有什麼差別的詳細內容。更多資訊請關注PHP中文網其他相關文章!

去掉重复并排序的方法:1、使用“Array.from(new Set(arr))”或者“[…new Set(arr)]”语句,去掉数组中的重复元素,返回去重后的新数组;2、利用sort()对去重数组进行排序,语法“去重数组.sort()”。

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于Symbol类型、隐藏属性及全局注册表的相关问题,包括了Symbol类型的描述、Symbol不会隐式转字符串等问题,下面一起来看一下,希望对大家有帮助。

怎么制作文字轮播与图片轮播?大家第一想到的是不是利用js,其实利用纯CSS也能实现文字轮播与图片轮播,下面来看看实现方法,希望对大家有所帮助!

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于对象的构造函数和new操作符,构造函数是所有对象的成员方法中,最早被调用的那个,下面一起来看一下吧,希望对大家有帮助。

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于面向对象的相关问题,包括了属性描述符、数据描述符、存取描述符等等内容,下面一起来看一下,希望对大家有帮助。

方法:1、利用“点击元素对象.unbind("click");”方法,该方法可以移除被选元素的事件处理程序;2、利用“点击元素对象.off("click");”方法,该方法可以移除通过on()方法添加的事件处理程序。

foreach不是es6的方法。foreach是es3中一个遍历数组的方法,可以调用数组的每个元素,并将元素传给回调函数进行处理,语法“array.forEach(function(当前元素,索引,数组){...})”;该方法不处理空数组。

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于BOM操作的相关问题,包括了window对象的常见事件、JavaScript执行机制等等相关内容,下面一起来看一下,希望对大家有帮助。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

Safe Exam Browser
Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。

SublimeText3 英文版
推薦:為Win版本,支援程式碼提示!

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),