參考資料: 匯智網(wǎng)
JavaScript函數(shù)在定義時并不會去執(zhí)行进倍,只有我們在調(diào)用定義的函數(shù)時纽窟,它才會去執(zhí)行填具。
在JavaScript中有四種方式調(diào)用函數(shù)偷办,如下:
- 方法調(diào)用模式艰额;
- 函數(shù)調(diào)用模式;
- 構(gòu)造器調(diào)用模式椒涯;
- apply調(diào)用模式柄沮。
1. 方法調(diào)用模式
當一個函數(shù)被保存為對象的一個屬性時,我們稱它為一個方法废岂。如果調(diào)用表達式包含一個提取屬性的動作(即我們在講解對象時說的.
操作符)祖搓,那么它就被當做一個方法來調(diào)用。
//對象字面量
var myObj = {
param1: 1,
param2: 2,
sum: function (){
//this關(guān)鍵字指代當前的對象
return this.result = this.param1 + this.param2;
}
}
myObj.sum(); //=>3
2. 函數(shù)調(diào)用模式
函數(shù)調(diào)用模式即通常的函數(shù)調(diào)用湖苞,屬于全局性調(diào)用屡萤。如下:
var add = function(a, b){
return a + b;
}
//函數(shù)調(diào)用模式
add(1,2); //=>3
上述代碼等價于:
function add(a, b){
return a + b;
}
add(1,2);//=>3
3. 構(gòu)造器調(diào)用模式
JavaScript中函數(shù)還可以是構(gòu)造器.
將函數(shù)作為構(gòu)造器來使用的語法就是在函數(shù)調(diào)用前面加上一個new
關(guān)鍵字. 如以下代碼:
function Add() {
this.name = "匯智網(wǎng)";
this.sum = function (a, b){
return a + b;
}
}
// 構(gòu)造器調(diào)用模式
var obj = new Add(); //obj是一個對象
obj.sum(1,2); //=>3
上述中的代碼創(chuàng)建了一個構(gòu)造函數(shù)Add揉阎,然后使用構(gòu)造函數(shù)創(chuàng)建對象obj。這里使用了new關(guān)鍵字。然后使用對象調(diào)用sum()方法规哪。
4. apply調(diào)用模式
JavaScript
中函數(shù)也是對象望浩,也可以擁有方法响驴。其中call()
和apply()
用來間接的調(diào)用函數(shù)琼梆。稱之為apply
調(diào)用模式。
apply
方法讓我們構(gòu)建一個參數(shù)數(shù)組傳遞給調(diào)用函數(shù)捌臊。它也允許我們選擇this
的值杨蛋。 apply
方法接收兩個參數(shù),第一個是要綁定給this
的值理澎,第二個就是一個參數(shù)數(shù)組逞力。
語法:函數(shù)名.apply(對象, 參數(shù)數(shù)組);
示例:
var add = function (a, b) {
return a + b;
}
add.apply(null,[1,2]); //=>3
call
方法與apply
方法類似,區(qū)別在call
第二參數(shù)不是一個數(shù)組而是需要列舉出來矾端。比如上述中的代碼用call
方法來實現(xiàn)掏击,如下
var add = function (a, b) {
return a + b;
}
add.call(null,1,2); //=>3