js構(gòu)造函數(shù)this指向

JS里沒有類.

構(gòu)造函數(shù)是個函數(shù),this指向的是個對象,this蒙上眼睛指也指不到構(gòu)造函數(shù)去.

構(gòu)造函數(shù)的this指向創(chuàng)建的實(shí)例對象無疑.要明白這一點(diǎn),要先弄明白,用new操作符調(diào)用構(gòu)造函數(shù)的時候都發(fā)生了什么.

正好我有個答案是講構(gòu)造函數(shù)的,我這里原樣搬來:

造函數(shù)其實(shí)和普通函數(shù)本質(zhì)上并無區(qū)別,唯一的區(qū)別有兩個:

1.函數(shù)首字母大寫糊昙,這個區(qū)別只是約定俗成的咬清,便于區(qū)分李破。你實(shí)在要小寫定義構(gòu)造函數(shù)也完全沒問題构资,所以這個區(qū)別可以忽略乌妒。

2.構(gòu)造函數(shù)的調(diào)用需要用new操作符,而普通函數(shù)的調(diào)用又分很多種,但是都不會用到new操作符赋除。所以,構(gòu)造函數(shù)和普通函數(shù)的區(qū)別就在這個new操作符里非凌,現(xiàn)在讓我們來好好研究一下這個new操作符举农。

new操作符創(chuàng)建對象時發(fā)生的事情:

第一步:創(chuàng)建一個Object對象實(shí)例。

第二步:將構(gòu)造函數(shù)的執(zhí)行對象賦給新生成的這個實(shí)例敞嗡。

第三步:執(zhí)行構(gòu)造函數(shù)中的代碼

第四步:返回新生成的對象實(shí)例

注意:原本的構(gòu)造函數(shù)是window對象的方法颁糟,如果不用new操作符而直接調(diào)用,那么構(gòu)造函數(shù)的執(zhí)行對象就是window喉悴,即this指向了window±饷玻現(xiàn)在用new操作符后,this就指向了新生成的對象箕肃。理解這一步至關(guān)重要婚脱。

執(zhí)行構(gòu)造函數(shù)中的代碼,看代碼:

functionPerson(){

this.name="Tiny Colder";

varage =22;

window.age =22;

}

varp =newPerson();

alert(p.name)//Tiny Colder;

alert(p.age)//undefined;

alert(window.age)//22;

當(dāng)用new操作符創(chuàng)建對象時勺像,先創(chuàng)建了一個對象實(shí)例障贸,然后執(zhí)行代碼。所以還在糾結(jié)吟宦,什么時候構(gòu)造函數(shù)定義的屬性會繼承給實(shí)例對象的篮洁,都可以這么來看:

varp=newObject();

p.name="Tiny Colder";

這是普通的創(chuàng)建對象,然后給對象添加屬性的方法殃姓。如果每創(chuàng)建一個對象袁波,都需要這么幾行代碼,無疑是糟糕的蜗侈。這個需求就正好跟這一點(diǎn)對應(yīng):new操作符篷牌,自動執(zhí)行構(gòu)造函數(shù)里的代碼。如此我們便可以省掉添加屬性時重復(fù)冗余的代碼宛篇。那么這些屬性時如何添加到新生成的對象里的呢娃磺?

第二個步驟里已經(jīng)說了:將構(gòu)造函數(shù)的執(zhí)行對象賦給新生成的這個實(shí)例。再結(jié)合上一段里說的叫倍,自動執(zhí)行構(gòu)造函數(shù)里的

this.name = "Tiny Colder";時偷卧,就相當(dāng)于是執(zhí)行p.name = "Tiny Colder";而構(gòu)造函數(shù)里的var age = 22;語句,會執(zhí)行但是對新生成的對象并無影響吆倦。window.age = 22;語句听诸,會執(zhí)行,且會給window對象添加一個屬性蚕泽。alert為證晌梨。

或許到這里桥嗤,你已經(jīng)理解了new操作符的前三步了,重要的三步仔蝌。但是這個函數(shù)是如何返回對象的呢泛领?我們并沒有看到有任何跟return相關(guān)的語句。這就是new操作符的最后一步:返回新生成的對象敛惊。如果被調(diào)用的函數(shù)沒有顯式的return表達(dá)式(僅限于返回對象)渊鞋,則隱式的會返回this對象-也就是新創(chuàng)建的對象。

現(xiàn)在來看一下這個代碼:

functionPerson(){

this.name="Tiny Colder";

return{};

}

varp =newPerson();

alert(p.name)//undefined;

一個對象就這么被創(chuàng)建出來了瞧挤。實(shí)際上锡宋,

varp =newPerson();

varp =newObject();

Person.apply(p);

是一樣的效果

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市特恬,隨后出現(xiàn)的幾起案子执俩,更是在濱河造成了極大的恐慌,老刑警劉巖癌刽,帶你破解...
    沈念sama閱讀 219,427評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件役首,死亡現(xiàn)場離奇詭異,居然都是意外死亡显拜,警方通過查閱死者的電腦和手機(jī)宋税,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來讼油,“玉大人,你說我怎么就攤上這事呢簸“ǎ” “怎么了?”我有些...
    開封第一講書人閱讀 165,747評論 0 356
  • 文/不壞的土叔 我叫張陵根时,是天一觀的道長瘦赫。 經(jīng)常有香客問我,道長蛤迎,這世上最難降的妖魔是什么确虱? 我笑而不...
    開封第一講書人閱讀 58,939評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮替裆,結(jié)果婚禮上校辩,老公的妹妹穿的比我還像新娘。我一直安慰自己辆童,他們只是感情好宜咒,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,955評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著把鉴,像睡著了一般故黑。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,737評論 1 305
  • 那天场晶,我揣著相機(jī)與錄音混埠,去河邊找鬼。 笑死诗轻,一個胖子當(dāng)著我的面吹牛钳宪,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播概耻,決...
    沈念sama閱讀 40,448評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼使套,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了鞠柄?” 一聲冷哼從身側(cè)響起侦高,我...
    開封第一講書人閱讀 39,352評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎厌杜,沒想到半個月后奉呛,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,834評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡夯尽,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,992評論 3 338
  • 正文 我和宋清朗相戀三年瞧壮,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片匙握。...
    茶點(diǎn)故事閱讀 40,133評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡咆槽,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出圈纺,到底是詐尸還是另有隱情秦忿,我是刑警寧澤,帶...
    沈念sama閱讀 35,815評論 5 346
  • 正文 年R本政府宣布蛾娶,位于F島的核電站灯谣,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏蛔琅。R本人自食惡果不足惜胎许,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,477評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望罗售。 院中可真熱鬧辜窑,春花似錦、人聲如沸寨躁。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,022評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽朽缎。三九已至惨远,卻和暖如春谜悟,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背北秽。 一陣腳步聲響...
    開封第一講書人閱讀 33,147評論 1 272
  • 我被黑心中介騙來泰國打工葡幸, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人贺氓。 一個月前我還...
    沈念sama閱讀 48,398評論 3 373
  • 正文 我出身青樓蔚叨,卻偏偏與公主長得像,于是被迫代替她去往敵國和親辙培。 傳聞我的和親對象是個殘疾皇子蔑水,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,077評論 2 355

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

  • 第5章 引用類型(返回首頁) 本章內(nèi)容 使用對象 創(chuàng)建并操作數(shù)組 理解基本的JavaScript類型 使用基本類型...
    大學(xué)一百閱讀 3,237評論 0 4
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法扬蕊,內(nèi)部類的語法搀别,繼承相關(guān)的語法,異常的語法尾抑,線程的語...
    子非魚_t_閱讀 31,644評論 18 399
  • 沒搞錯吧歇父!js寫了那么多年,this還是會搞錯再愈!沒搞錯榜苫,javascript就是回搞錯! ………… 在寫java的...
    zhoulujun閱讀 1,448評論 0 11
  • 中午,下班去吃飯抗悍,同事去買烤串我和她一起羔飞,因?yàn)樘鞖庀掠辏哉驹诳緮偳皶r我的注意力檐春,都放在了都放在了濕漉漉的路面和...
    等在角落里的碎碎念閱讀 236評論 0 1
  • 公元1992年11月11日,一個新的生命來到這個世界么伯,他的奶奶順次給他取名叫做葉凌輝疟暖,從此便在這個平凡的農(nóng)民大家庭...
    iiKris閱讀 367評論 0 1