this對象的指向

一般來說,this的指向是指誰調(diào)用的方法this就是指向誰(這句話有些問題蚣驼,后面會解釋為什么會有問題雳窟,雖然網(wǎng)上大部分的文章都是這樣說的,雖然在很多情況下那樣去理解不會出什么問題典予,但是實際上那樣理解是不準(zhǔn)確的,所以在理解this的時候會有種琢磨不透的感覺

例子1:

function a(){

? ?var obj="哈哈哈"乐严;

? ?console.log(this.obj)瘤袖;//undefined

? ?console.log(this);//window

}

a();

按照上面的說法這里的this最終指向的是調(diào)用它的對象昂验,由于這里的函數(shù)a是被window對象調(diào)用的捂敌,所以?console.log(this)的時候打印出window,而?console.log(this.obj)的時候由于obj參數(shù)只存在于函數(shù)a里面既琴,而window下并沒有obj參數(shù)占婉,所以打印出來是undefined

function a(){

? ?var obj="哈哈哈";

? ? console.log(this.obj); //undefined

? ? console.log(this);  //Window

}

window.a();

這段代碼就可以看出來和上面的代碼的執(zhí)行結(jié)果是一樣的甫恩。

例子2:

var o = {

? ? obj:"哈哈哈",

? ? fn:function(){

? ? ? ? console.log(this.obj);//哈哈哈?

? ? ?}

}

o.fn();

還是通過上面的結(jié)論逆济,由于函數(shù)fn是通過o.fn()執(zhí)行的,那自然指向就是對象o,而對象o中確實是存在obj的奖慌,所以打印出來就是對象o里面的obj的內(nèi)容也就是‘哈哈哈’霎终,同時從這里我們也能看出來,this的指向在函數(shù)創(chuàng)建的時候是決定不了的升薯,只有在函數(shù)調(diào)用的時候才能決定莱褒,誰調(diào)用的就指向誰,這一點是很重要的涎劈,一定要記住广凸。

但是要搞清楚this還要看接下來的幾個例子:

例子3:

var o = {

? ? obj:"哈哈哈",

? ? fn:function(){

? ? ? ? console.log(this.obj);//哈哈哈?

? ? ?}

}

window.o.fn();

例子3幾乎和例子2是一樣的,只是最后一句在調(diào)用函數(shù)的時候不太相同蛛枚,但是通過打印的結(jié)果可以看出來谅海,這里的this指向的還是對象o,如果按照一開始的理論蹦浦,this指向的調(diào)用它的對象扭吁,那這里應(yīng)該是指向window對象,為什么沒有呢盲镶?侥袜??(ps:window是js中的全局對象溉贿,我們創(chuàng)建的變量實際上是給window添加屬性枫吧,所以這里可以用window.o.fn來調(diào)用函數(shù))

在解釋這為什么不指向window之前,我們再來看一段代碼:

var o = {

? ? a:10,

? ? ?b:{

? ? ? ? ? ? a:20;

? ? ? ? ? ? fn:function(){

? ? ? ? ? ? ? ? ? ? ? console.log(this.obj);//20

? ? ? ? ? ? ?}

? ? ? ? }

}

o.b.fn();

這里同樣是對象o調(diào)用的函數(shù)fn宇色,但是同樣的九杂,this對象也沒有指向o,而是指向?qū)ο骲宣蠕,是因為我們一開始說的誰調(diào)用的方法this就是指向誰是錯誤的嗎例隆,其實也不是,只是說的不準(zhǔn)確抢蚀,所以要對這個結(jié)論進(jìn)行補充镀层,才能徹底的理解this的指向問題。

情況1:如果一個函數(shù)中有this思币,但是它沒有被上一級的對象所調(diào)用鹿响,那么this指向的就是window羡微。

情況2:如果一個函數(shù)中有this谷饿,這個函數(shù)有被上一級函數(shù)所調(diào)用,那么this指向的就是上一級的對象妈倔。

情況3:如果一個函數(shù)中有this博投,這個函數(shù)中包含多個對象,盡管這個函數(shù)是被最外層的對象所調(diào)用盯蝴,this指向的也只是它上一級的對象毅哗。

所以這也就解釋了上面的例子3听怕,在例子3中,雖然最后一句是window.o.fn()虑绵,看上去是window調(diào)用的fn尿瞭,但是實際上this對象并不指向window而是指向函數(shù)fn的上一級的對象o。下面這個例子就是一個很好的證明翅睛。

var o = {

? ? a:10,

? ? ?b:{

? ? ? ? ? ?// a:20;

? ? ? ? ? ? fn:function(){

? ? ? ? ? ? ? ? ? ? ? console.log(this.obj);//undefined

? ? ? ? ? ? ?}

? ? ? ? }

}

o.b.fn();

這里可以看到声搁,盡管對象b中沒有屬性a,這里的this也是指向?qū)ο骲捕发,因為this只會指向它的上一級對象疏旨,不管這個對象中有沒有this要的東西。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末扎酷,一起剝皮案震驚了整個濱河市檐涝,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌法挨,老刑警劉巖谁榜,帶你破解...
    沈念sama閱讀 212,718評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異凡纳,居然都是意外死亡惰爬,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評論 3 385
  • 文/潘曉璐 我一進(jìn)店門惫企,熙熙樓的掌柜王于貴愁眉苦臉地迎上來撕瞧,“玉大人,你說我怎么就攤上這事狞尔〈园妫” “怎么了?”我有些...
    開封第一講書人閱讀 158,207評論 0 348
  • 文/不壞的土叔 我叫張陵偏序,是天一觀的道長页畦。 經(jīng)常有香客問我,道長研儒,這世上最難降的妖魔是什么豫缨? 我笑而不...
    開封第一講書人閱讀 56,755評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮端朵,結(jié)果婚禮上好芭,老公的妹妹穿的比我還像新娘。我一直安慰自己冲呢,他們只是感情好舍败,可當(dāng)我...
    茶點故事閱讀 65,862評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般邻薯。 火紅的嫁衣襯著肌膚如雪裙戏。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 50,050評論 1 291
  • 那天厕诡,我揣著相機與錄音累榜,去河邊找鬼。 笑死灵嫌,一個胖子當(dāng)著我的面吹牛信柿,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播醒第,決...
    沈念sama閱讀 39,136評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼渔嚷,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了稠曼?” 一聲冷哼從身側(cè)響起形病,我...
    開封第一講書人閱讀 37,882評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎霞幅,沒想到半個月后漠吻,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,330評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡司恳,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,651評論 2 327
  • 正文 我和宋清朗相戀三年途乃,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片扔傅。...
    茶點故事閱讀 38,789評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡耍共,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出猎塞,到底是詐尸還是另有隱情试读,我是刑警寧澤,帶...
    沈念sama閱讀 34,477評論 4 333
  • 正文 年R本政府宣布荠耽,位于F島的核電站钩骇,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏铝量。R本人自食惡果不足惜倘屹,卻給世界環(huán)境...
    茶點故事閱讀 40,135評論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望慢叨。 院中可真熱鬧纽匙,春花似錦、人聲如沸插爹。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,864評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽赠尾。三九已至力穗,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間气嫁,已是汗流浹背当窗。 一陣腳步聲響...
    開封第一講書人閱讀 32,099評論 1 267
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留寸宵,地道東北人崖面。 一個月前我還...
    沈念sama閱讀 46,598評論 2 362
  • 正文 我出身青樓,卻偏偏與公主長得像梯影,于是被迫代替她去往敵國和親巫员。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,697評論 2 351

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

  • JavaScript中的this指向問題有很多博客在解釋甲棍,仍然有很多人問简识。上周我們的開發(fā)團(tuán)隊連續(xù)兩個人遇到相關(guān)問題...
    一個敲代碼的前端妹子閱讀 651評論 0 5
  • 第2章 基本語法 2.1 概述 基本句法和變量 語句 JavaScript程序的執(zhí)行單位為行(line),也就是一...
    悟名先生閱讀 4,132評論 0 13
  • 工廠模式類似于現(xiàn)實生活中的工廠可以產(chǎn)生大量相似的商品感猛,去做同樣的事情七扰,實現(xiàn)同樣的效果;這時候需要使用工廠模式。簡單...
    舟漁行舟閱讀 7,729評論 2 17
  • 葡萄藤PPT JS中this的指向 大家好陪白,我是IT修真院鄭州分院第6期的學(xué)員王棟颈走,一枚正直、純潔咱士、善良的前端程序...
    17064閱讀 620評論 0 2
  • 感謝她立由,將我的世界解讀為善良、正直還有愛序厉。 我始終認(rèn)為拆吆,在我們懵懵懂懂的青春期,需要有人為我們解讀這個世界脂矫。 都怪...
    天天天很藍(lán)lwy閱讀 200評論 0 4