javascript(js)中函數apply和call的用法、區別、聯繫

js中apply和call兩種方法作用基本是一樣的,主要的功能有兩個:
1. 改變函數作用域
2. 借用其他函數的功能

基本的用法爲
functionName.apply(作用域, 數組形式參數列表) 和functionName.apply(作用域, 參數列表)
a.apply(obj, [1, 2])  a.call(obj, 1, 2);

舉例說明:
1. 改變函數作用域
比如有兩個對象
var a = {
name: 'a',
sayName: function(){
alert(this.name);
}
}
a.sayName(); //彈出a

var b = {
name: 'b',
sayName: function(){
alert(this.name);
}
}
b.sayName(); //彈出b

見證奇蹟的時刻到啦
a.sayName.apply(b); //彈出b
a.sayName.call(b); //彈出b

這個函數的意思是,將對象a中的sayName函數的作用於變爲b對象,然後執行sayName這個函數
在這裏apply和call功能是一樣的

2. 借用其他函數的功能
這個功能以求幾個數中最大數爲例說明
在js中求幾個數中最大值的方法爲:
var max = Math.max(1, 2, 10, 7); //結果爲10

假如我想求一個數組中的最大怎麼辦呢?這時apply就派上用場了
Math.max.apply('', [1, 2, 10, 7]); //結果爲10

這裏只能使用apply,不能用call,它們的主要區別是apply接受的參數要以數組的形式給出,
而call是要把參數一一列舉出來。
發佈了21 篇原創文章 · 獲贊 24 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章