我們先來看個實例
function Me(name,age,job){ this.name = name; this.age = age; this.job = job; }
請問這以下兩種實例化物件方式有什麼差別呢?
var mefun1 = new Me('fei','20','it'); var mefun2 = Me('fei','20','it');
簡單的說
第一種是建構函式,即透過new運算子呼叫建構函式Function來建立函式
第二種不是實例化,只是呼叫函數把回傳值賦給變數。
再擴充下
JavaScript 中並沒有真正的類,但JavaScript 中有建構子和new 運算子。建構函式用來給實例物件初始化屬性和值。任何JavaScript 函數都可以用來做建構函數,建構函式必須使用new 運算子作為前綴來建立新的實例。
new 運算子改變了函數的執行上下文,同時改變了return 語句的行為。實際上,使用new和建構子很類似傳統的實作了類別的語言:
// 实例化一个Me var alice = new Me('alice', 18, 'Coder'); // 检查这个实例 assert( alice instanceof Me );
建構子的命名通常使用駝峰命名法,首字母大寫,以此和普通的函數區分開來,這是
一種習慣用法。
// 不要这么做! Me('alice', 18, 'Coder'); //=> undefined
這個函數只會回傳undefined,執行上下文是window(全域)對象,無意間創建了3個全域變數name,age,job。呼叫建構函式時不要丟掉new 關鍵字。
當使用new 關鍵字來呼叫建構函式時,執行上下文從全域物件(window)變成一個空的上下文,這個上下文代表了新產生的實例。因此,this 關鍵字指向目前建立的實例。儘管理解起來有些繞,實際上其他語言內置類機制的實作也是如此。
預設情況下,如果你的建構函式中沒有回傳任何內容,就會回傳this-目前的上下文。
不然就傳回任意非原始型別的值.
以上所述就是本文的全部內容了,希望大家能夠喜歡。