JavaScript中this的用法

今天去面試,再次被面試官要求解釋一下this的用法渴肉。但是很遺憾冗懦,我對(duì)this的理解只局限與把它當(dāng)成全局變量。因此仇祭,回來(lái)之后披蕉,決定亡羊補(bǔ)牢,搞清楚this的用法乌奇。
1.全局代碼中的this

alert(this); //window

2.普通函數(shù)中的this

function test(){ this.x = 2; }; test(); alert(x); //全局變量x=2

這里this指向了全局對(duì)象嚣艇,即window。在嚴(yán)格模式中华弓,則是undefined。
為了證明是全局變量的x困乒,將代碼更改如下:

var x = 1; funcion test(){ alert(this.x) ; } test(); alert(x); //全局變量x=1

3.作為對(duì)象的方法調(diào)用

var name = "clever coder"; var person = { name : "foocoder", hello : function(sth){ console.log(this.name + " says " + sth); } } person.hello("hello world");

輸出 foocoder says hello world寂屏。this指向person對(duì)象,即當(dāng)前對(duì)象。
4.對(duì)于對(duì)象方法的內(nèi)部函數(shù)

var name = "clever coder"; var person = { name : "foocoder", hello : function(sth){ var sayhello = function(sth) { console.log(this.name + " says " + sth); }; sayhello(sth); } } person.hello("hello world");//clever coder says hello world

在內(nèi)部函數(shù)中迁霎,this沒(méi)有按預(yù)想的綁定到外層函數(shù)對(duì)象上吱抚,而是綁定到了全局對(duì)象。這里普遍被認(rèn)為是JavaScript語(yǔ)言的設(shè)計(jì)錯(cuò)誤考廉,因?yàn)闆](méi)有人想讓內(nèi)部函數(shù)中的this指向全局對(duì)象秘豹。一般的處理方式是將this作為變量保存下來(lái),一般約定為that或者self:

var name = "clever coder"; var person = { name : "foocoder", hello : function(sth){ var that = this; var sayhello = function(sth) { console.log(that.name + " says " + sth); }; sayhello(sth); } } person.hello("hello world");//foocoder says hello world

5.對(duì)于構(gòu)造函數(shù)中的this
所謂構(gòu)造函數(shù)昌粤,就是通過(guò)這個(gè)函數(shù)生成一個(gè)新對(duì)象(object)既绕。這時(shí),this就是指這個(gè)新對(duì)象涮坐。

function test(){     this.x = 1;   }   var o = new test();   alert(o.x); // 1

運(yùn)行結(jié)果為1凄贩。為了表明這時(shí)this不是全局對(duì)象,對(duì)代碼做一些改變:

var x = 2;   function test(){     this.x = 1;   }   var o = new test();   alert(x); //2

運(yùn)行結(jié)果為2袱讹,表明全局變量x的值根本沒(méi)變疲扎。
5.apply的應(yīng)用
apply()是函數(shù)對(duì)象的一個(gè)方法,它的作用是改變函數(shù)的調(diào)用對(duì)象捷雕,它的第一個(gè)參數(shù)就表示改變后的調(diào)用這個(gè)函數(shù)的對(duì)象椒丧。因此,this指的就是這第一個(gè)參數(shù)救巷。

var x = 0;   function test(){     alert(this.x);   }   var o={};   o.x = 1;   o.m = test;   o.m.apply(); //0

apply()的參數(shù)為空時(shí)壶熏,默認(rèn)調(diào)用全局對(duì)象。因此征绸,這時(shí)的運(yùn)行結(jié)果為0久橙,證明this指的是全局對(duì)象。
如果把最后一行代碼修改為

o.m.apply(o); //1

運(yùn)行結(jié)果就變成了1管怠,證明了這時(shí)this代表的是對(duì)象o淆衷。

參考文檔:
阮一峰 Javascript的this用法
詳解JavaScript中的this

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市渤弛,隨后出現(xiàn)的幾起案子祝拯,更是在濱河造成了極大的恐慌,老刑警劉巖她肯,帶你破解...
    沈念sama閱讀 217,185評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件佳头,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡晴氨,警方通過(guò)查閱死者的電腦和手機(jī)康嘉,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)籽前,“玉大人亭珍,你說(shuō)我怎么就攤上這事敷钾。” “怎么了肄梨?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,524評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵阻荒,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我众羡,道長(zhǎng)侨赡,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,339評(píng)論 1 293
  • 正文 為了忘掉前任粱侣,我火速辦了婚禮羊壹,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘甜害。我一直安慰自己舶掖,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,387評(píng)論 6 391
  • 文/花漫 我一把揭開(kāi)白布尔店。 她就那樣靜靜地躺著眨攘,像睡著了一般。 火紅的嫁衣襯著肌膚如雪嚣州。 梳的紋絲不亂的頭發(fā)上鲫售,一...
    開(kāi)封第一講書(shū)人閱讀 51,287評(píng)論 1 301
  • 那天,我揣著相機(jī)與錄音该肴,去河邊找鬼情竹。 笑死,一個(gè)胖子當(dāng)著我的面吹牛匀哄,可吹牛的內(nèi)容都是我干的秦效。 我是一名探鬼主播,決...
    沈念sama閱讀 40,130評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼涎嚼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼阱州!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起法梯,我...
    開(kāi)封第一講書(shū)人閱讀 38,985評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤苔货,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后立哑,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體夜惭,經(jīng)...
    沈念sama閱讀 45,420評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,617評(píng)論 3 334
  • 正文 我和宋清朗相戀三年铛绰,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了诈茧。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,779評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡捂掰,死狀恐怖若皱,靈堂內(nèi)的尸體忽然破棺而出镊叁,到底是詐尸還是另有隱情,我是刑警寧澤走触,帶...
    沈念sama閱讀 35,477評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站疤苹,受9級(jí)特大地震影響互广,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜卧土,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,088評(píng)論 3 328
  • 文/蒙蒙 一惫皱、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧尤莺,春花似錦旅敷、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,716評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至友酱,卻和暖如春晴音,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背缔杉。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,857評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工锤躁, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人或详。 一個(gè)月前我還...
    沈念sama閱讀 47,876評(píng)論 2 370
  • 正文 我出身青樓系羞,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親霸琴。 傳聞我的和親對(duì)象是個(gè)殘疾皇子椒振,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,700評(píng)論 2 354

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