new 運算符與構(gòu)造函數(shù)
當(dāng)一個函數(shù)被 new
運算符調(diào)用的時候,這個函數(shù)就會被稱為構(gòu)造函數(shù)。
任何函數(shù)都能被 new
運算符調(diào)用,但是一般會從設(shè)計上將一個函數(shù)考慮為構(gòu)造函數(shù),提供給 new
運算符調(diào)用。
function Human(name, gender) {
this.name = name;
this.gender = gender;
}
var human = new Human();
1. 構(gòu)造函數(shù)的作用
構(gòu)造函數(shù)的主要作用是用于生成對象。
有其他面向?qū)ο笳Z言開發(fā)經(jīng)驗的同學(xué)可能會覺得使用 new
運算符的語法和創(chuàng)建類的實例很像,其實本質(zhì)是不一樣的。
結(jié)合原型的特性,在 JavaScript
中也能實現(xiàn)類似于類的一套機制。
關(guān)于構(gòu)造函數(shù)和原型的處理關(guān)系,原型章節(jié)已經(jīng)有詳細(xì)介紹,具體內(nèi)容可以參考原型章節(jié)。
2. new 運算符的運算機制
使用 new 運算符調(diào)用函數(shù)的時,背后有一套運行機制,這套機制說明了構(gòu)造函數(shù)是怎么產(chǎn)生對象的。
當(dāng) new 運算符調(diào)用函數(shù)時,大致會進行以下幾個操作:
- 創(chuàng)建一個空對象
- 將函數(shù)的this指向這個空對象
- 執(zhí)行函數(shù)
- 如果函數(shù)沒有指定返回值,則直接返回 this(一開始創(chuàng)建的空對象),否則返回指定返回值
function Person(name, gender, age) {
this.name = name;
this.gender = gender;
this.age = age;
}
var person = new Person('小明', '男', 17);
console.log(person.name);
這樣就能理解為什么使用 new
操作符可以生成對象了。
這個機制也是面試的高頻題。
3. 小結(jié)
構(gòu)造函數(shù)用于生成對象,理解構(gòu)造函數(shù)和原型機制非常重要,不但是面試中的高頻題,也可以提升編寫高質(zhì)量、可復(fù)用的代碼的能力。