1. 程式人生 > >call()和apply()

call()和apply()

作為函式方法呼叫函式

在 JavaScript 中, 函式是物件。JavaScript 函式有它的屬性和方法。
call() 和 apply() 是預定義的函式方法。 兩個方法可用於呼叫函式,兩個方法的第一個引數必須是物件本身。

例項

function myFunction(a, b) { return a * b; } myObject = myFunction.call(myObject, 10, 2); // 返回 20

例項

function myFunction(a, b) { return a * b; } myArray = [10, 2]; myObject = myFunction.apply(myObject, myArray); // 返回 20

兩個方法都使用了物件本身作為第一個引數。 兩者的區別在於第二個引數: apply傳入的是一個引數陣列,也就是將多個引數組合成為一個數組傳入,而call則作為call的引數傳入(從第二個引數開始)。
在 JavaScript 嚴格模式(strict mode)下, 在呼叫函式時第一個引數會成為 this 的值, 即使該引數不是一個物件。
在 JavaScript 非嚴格模式(non-strict mode)下, 如果第一個引數的值是 null 或 undefined, 它將使用全域性物件替代。
通過 call() 或 apply() 方法你可以設定 this 的值, 且作為已存在物件的新方法呼叫。

呼叫函式可以使用call或者apply這兩個方法,區別在於call需要將傳遞給函式的引數明確寫出來,是多少引數就需要寫多少引數。而apply則將傳遞給函式的引數放入一個數組中,傳入引數陣列即可。
123 function argsAsArray(fn, arr) { return fn.apply(this, arr); }

function argsAsArray(fn, arr) {
return fn.apply(this,arr)
}