# 函數調用
javaScript 函數有 4 種調用方式。
每種方式的不同在于 this 的初始化。
一般而言,在Javascript中,this指向函數執行時的當前對象。
>注意 this 是保留關鍵字,你不能修改 this 的值。
函數作為方法調用
以下實例創建了一個對象 (myObject), 對象有兩個屬性 (firstName 和 lastName), 及一個方法 (fullName):
```
var myObject = {
firstName:"John",
lastName: "Doe",
fullName: function () {
return this.firstName + " " + this.lastName;
}
}
myObject.fullName(); // 返回 "John Doe"
```
>實例中 this 的值為 myObject 對象。
---
### 使用構造函數調用函數
```
如果函數調用前使用了 new 關鍵字, 則是調用了構造函數。
這看起來就像創建了新的函數,但實際上 JavaScript 函數是重新創建的對象
```
```
// 構造函數:
function myFunction(arg1, arg2) {
this.firstName = arg1;
this.lastName = arg2;
}
// This creates a new object
var x = new myFunction("John","Doe");
x.firstName; // 返回 "John"
```
>構造函數的調用會創建一個新的對象。新對象會繼承構造函數的屬性和方法。
>構造函數中 this 關鍵字沒有任何的值。
>this 的值在函數調用實例化對象(new object)時創建。
###
---
### 作為函數方法調用函數
```
在 JavaScript 中, 函數是對象。JavaScript 函數有它的屬性和方法。
call() 和 apply() 是預定義的函數方法。 兩個方法可用于調用函數,兩個方法的第一個參數必須是對象本身。
```
```
function myFunction(a, b) {
return a * b;
}
myObject = myFunction.call(myObject, 10, 2); // 返回 20
```
---