36 #3對象深入-構(gòu)造函數(shù)與 new 命令

面向?qū)ο缶幊?br> “面向?qū)ο缶幊獭保∣bject Oriented Programming跟狱,縮寫為OOP)是目前主流的編程范式
雖然不同于傳統(tǒng)的面向?qū)ο缶幊陶Z言(java c++),但是JavaScript具有很強(qiáng)的面向?qū)ο缶幊棠芰?/p>

每一個對象都是功能中心,具有明確分工,可以完成接受信息、處理數(shù)據(jù)春瞬、發(fā)出信息等任務(wù)
面向?qū)ο缶幊叹哂徐`活性、代碼的可重用性莹汤、模塊性等特點(diǎn)快鱼,容易維護(hù)和開發(fā)颠印,非常適合多人合作的大型軟件項(xiàng)目

構(gòu)造函數(shù)
“面向?qū)ο缶幊獭钡牡谝徊礁倭耄褪且伞皩ο蟆?br> JavaScript的對象體系,是基于構(gòu)造函數(shù)(constructor)和原型鏈(prototype)
JavaScript的面向?qū)ο缶幊袒凇霸蛯ο蟆?/p>

構(gòu)造函數(shù)的寫法就是一個普通的函數(shù)
var Vehicle = function () {
this.price = 1000;
};
上面代碼中线罕,Vehicle就是構(gòu)造函數(shù)止潮,它提供模板,用來生成對象實(shí)例

* 為了與普通函數(shù)區(qū)別钞楼,構(gòu)造函數(shù)名字的第一個字母通常大寫  (構(gòu)造函數(shù)的非硬性要求)
* 函數(shù)體內(nèi)部使用了this關(guān)鍵字喇闸,代表了所要生成的對象實(shí)例(構(gòu)造函數(shù)的硬性要求)

new 命令 [ new 構(gòu)造函數(shù)返回對象實(shí)例; new普通函數(shù)返回{}無new無實(shí)例 ]
new命令的作用,就是執(zhí)行構(gòu)造函數(shù)询件,返回一個實(shí)例對象
var Vehicle = function (){
this.price = 1000;
};

var v = new Vehicle();
v.price // 1000
使用new命令時燃乍,根據(jù)需要,構(gòu)造函數(shù)也可以接受參數(shù)
var Vehicle = function (p) {
this.price = p;
};

var v = new Vehicle(500);
new命令本身就可以執(zhí)行構(gòu)造函數(shù)宛琅,所以后面的構(gòu)造函數(shù)可以帶括號刻蟹,也可以不帶括號
var v = new Vehicle();
var v = new Vehicle;
另一方面,如果對普通函數(shù)(內(nèi)部沒有this關(guān)鍵字的函數(shù))使用new命令嘿辟,則會返回一個空對象
function getMessage() {
return 'this is a message';
}

var msg = new getMessage();

msg // {}
typeof msg // "Object"
還有一方面舆瘪,如果沒有使用new命令,構(gòu)造函數(shù)就普通函數(shù)對待红伦,并不會生成對象實(shí)例
var Vehicle = function (){
this.price = 1000;// this指代Vehicle函數(shù)的調(diào)用者
};

var v = Vehicle();// v存著Vehicle函數(shù)的返回值undefined

v.price// Uncaught TypeError: Cannot read property 'price' of undefined
price// 1000

new命令的原理
使用new命令時英古,它后面的函數(shù)調(diào)用就不是正常的調(diào)用,而是依次執(zhí)行下面的步驟

1. 創(chuàng)建一個空對象
2. 將這個空對象的原型昙读,指向構(gòu)造函數(shù)的prototype屬性
3. 將這個空對象賦值給函數(shù)內(nèi)部的this關(guān)鍵字
4. 開始執(zhí)行構(gòu)造函數(shù)內(nèi)部的代碼
5. 返回this--即對象實(shí)例

也就是說構(gòu)造函數(shù)內(nèi)部召调,this指的是一個新生成的空對象,所有針對this的操作,都會發(fā)生在這個空對象上
構(gòu)造函數(shù)之所以叫“構(gòu)造函數(shù)”某残,就是說這個函數(shù)的目的国撵,就是操作一個空對象(即this對象),將其“構(gòu)造”為需要的樣子

構(gòu)造函數(shù)有return的情況
如果構(gòu)造函數(shù)內(nèi)部有return語句玻墅,而且 return語句返回的是一個跟this無關(guān)的新對象
new命令就會返回這個新對象介牙, 這一點(diǎn)需要特別引起注意
除此之外,就不會管return語句澳厢,直接返回this對象
var Vehicle = function (){
this.price = 1000;
return { price: 2000 };
};
new Vehicle()// 返回 Object {price: 2000}
var Vehicle = function () {
this.price = 1000;
return 1000;
};
new Vehicle()// 返回 this 指向所要生成對象實(shí)例

new.target(作為了解)
任何函數(shù)內(nèi)部都可以使用new.target屬性
如果當(dāng)前函數(shù)是new命令調(diào)用环础,new.target指向當(dāng)前函數(shù),否則為undefined剩拢。
function f() {
console.log(new.target === f);
}

new f() // true
f() // false

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末线得,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子徐伐,更是在濱河造成了極大的恐慌贯钩,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,744評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件办素,死亡現(xiàn)場離奇詭異角雷,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)性穿,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,505評論 3 392
  • 文/潘曉璐 我一進(jìn)店門勺三,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人需曾,你說我怎么就攤上這事吗坚。” “怎么了呆万?”我有些...
    開封第一講書人閱讀 163,105評論 0 353
  • 文/不壞的土叔 我叫張陵商源,是天一觀的道長。 經(jīng)常有香客問我谋减,道長牡彻,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,242評論 1 292
  • 正文 為了忘掉前任逃顶,我火速辦了婚禮讨便,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘以政。我一直安慰自己霸褒,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,269評論 6 389
  • 文/花漫 我一把揭開白布盈蛮。 她就那樣靜靜地躺著废菱,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上殊轴,一...
    開封第一講書人閱讀 51,215評論 1 299
  • 那天衰倦,我揣著相機(jī)與錄音,去河邊找鬼旁理。 笑死樊零,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的孽文。 我是一名探鬼主播驻襟,決...
    沈念sama閱讀 40,096評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼芋哭!你這毒婦竟也來了沉衣?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,939評論 0 274
  • 序言:老撾萬榮一對情侶失蹤减牺,失蹤者是張志新(化名)和其女友劉穎豌习,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體拔疚,經(jīng)...
    沈念sama閱讀 45,354評論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡肥隆,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,573評論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了草雕。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片巷屿。...
    茶點(diǎn)故事閱讀 39,745評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡固以,死狀恐怖墩虹,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情憨琳,我是刑警寧澤诫钓,帶...
    沈念sama閱讀 35,448評論 5 344
  • 正文 年R本政府宣布,位于F島的核電站篙螟,受9級特大地震影響菌湃,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜遍略,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,048評論 3 327
  • 文/蒙蒙 一惧所、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧绪杏,春花似錦下愈、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,683評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春履因,著一層夾襖步出監(jiān)牢的瞬間障簿,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,838評論 1 269
  • 我被黑心中介騙來泰國打工栅迄, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留站故,地道東北人。 一個月前我還...
    沈念sama閱讀 47,776評論 2 369
  • 正文 我出身青樓毅舆,卻偏偏與公主長得像世蔗,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子朗兵,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,652評論 2 354

推薦閱讀更多精彩內(nèi)容