jQuery是目前使用最廣泛的JavaScript庫之一,它提供了很多便捷的方法和API來簡化開發人員的工作。其中,apply和call方法是兩種非常常用的方法,本文將為您介紹它們的使用方法以及區別。
// apply和call的語法: // func.apply(thisArg, [argsArray]); // func.call(thisArg, arg1, arg2, ...); // apply方法使用示例: var obj = {num: 2}; var add = function(val1, val2){ return this.num + val1 + val2; }; console.log(add.apply(obj, [4, 6])); // 輸出:12 // call方法使用示例: var obj = {num: 2}; var add = function(val1, val2){ return this.num + val1 + val2; }; console.log(add.call(obj, 4, 6)); // 輸出:12
apply和call方法的共同點在于,它們都可以讓您指定函數中this的指向對象。它們的第一個參數都是一個對象,表示要指定的上下文,第二個參數則根據需要而定。
一般而言,apply方法接收的第二個參數是一個數組,而call方法則是接收一個參數列表。但是,您也可以通過改變傳參方式,使它們之間交換參數方式。例如,將apply方法中的數組改為多個參數,就能等價地使用call方法:
// 改變apply方法參數方式的使用方式: var obj = {num: 2}; var add = function(val1, val2){ return this.num + val1 + val2; }; console.log(add.apply(obj, [4, 6])); // 輸出:12 console.log(add.call(obj, 4, 6)); // 輸出:12
雖然apply和call方法都能改變函數中this的指向,但它們也存在一些區別。其中最大的區別在于傳參方式的不同。apply方法中接收一個數組,因此它適用于傳輸一個不確定數量的參數,而call方法適用于傳輸單一值的情況。
最后需要注意的是,如果您想使用apply或call方法,您需要將它們綁定到函數上??梢允褂胊pply或call方法在其它函數上創建函數拓展或借用函數:
// 利用apply或call方法來借用函數: var obj = {num: 2}; var add = function(val1, val2){ return this.num + val1 + val2; }; var sub = function(val1, val2){ return this.num - val1 - val2; }; console.log(add.call(sub, 9, 3)); // 輸出:-4 console.log(sub.apply(obj, [3, 1])); // 輸出:-2
總而言之,apply和call方法是JavaScript中非常重要的方法。它們可以讓開發人員改變函數中this指向的對象,這樣就可以方便地啟用函數拓展和借用函數。