從零單排的this

說起this磺浙,我突然想到一個外國佬學(xué)中文的段子:
解釋文中每個意思的意思: 阿呆送領(lǐng)導(dǎo)紅包。領(lǐng)導(dǎo):你什么意思挟纱?阿呆:意思意思。領(lǐng)導(dǎo)(打開看):你這就不夠意思了腐宋。阿呆:小意思紊服,小意思檀轨。領(lǐng)導(dǎo):你這人真沒意思。阿呆:其實沒有別的意思围苫。領(lǐng)導(dǎo):那我就不好意思了。老外淚流滿面撤师,交白卷回國剂府。

在學(xué)前端的時候,有的時候咱們也會遇到類似的問題剃盾,同樣的一個this腺占,不同的地方就顯示不同的效果,在我們的抓耳撓腮中痒谴,從入門到放棄衰伯,最后回家種田。無奈家中沒田积蔚,只能硬著頭皮學(xué)下去意鲸,所以花了一早上,把這個this給弄明白了尽爆。

讓我們先看看this是啥怎顾,
this對象是在運行時基于函數(shù)的執(zhí)行環(huán)境的上下文(context): 在全局函數(shù)或者匿名函數(shù)中,this等于window漱贱,當(dāng)函數(shù)被作為某個對象調(diào)用時槐雾,等于那個對象

看著也不難啊,所以真正讓人為難的不是this本身幅狮,其罪在于函數(shù)募强,如果不是函數(shù)的調(diào)用,this老老實實的崇摄,讓我們用console.log看看其原本是什么模樣:

console.log(this)

看上去倒是不那么面目可憎擎值,倒是可以頒發(fā)一張良民證。

那么身為柯南(小學(xué)生)的我表示真相只有一個逐抑,是因為函數(shù)幅恋。

來人,傳函數(shù)泵肄!

出現(xiàn)了四個身影:函數(shù)調(diào)用捆交,方法調(diào)用隱式調(diào)用構(gòu)造函數(shù)調(diào)用

怎么上來四個大漢腐巢,我不是傳函數(shù)的嘛品追?(WTF!!)
稟大人,是因為這個函數(shù)實在是太狡猾了冯丙,由一化四肉瓦,好不容易才把其全部繳獲遭京,你們還不老實招了!不然老虎棍泞莉,辣椒水伺候哪雕!

第一個開口是個憨厚的大漢,此人名叫——函數(shù)調(diào)用

其表現(xiàn)的是:func(p1, p2)鲫趁,咱們常用的alert("威武~~~斯嚎!")就是這類。

來挨厚,我問你堡僻,你的this是怎么個回事```

回稟大人,小人住在陳家溝,是一個農(nóng)民,我在家里好好干著活要出,就被抓來。
俺不懂什么this牲阁,小人啥也不懂,我只知道要聽window的話壤躲,要是在嚴(yán)格模式下咨油,就只能undefined了```
原來如此,經(jīng)過我縝密的分析柒爵,在函數(shù)調(diào)用中役电,this等于undefined或者null,其自動轉(zhuǎn)化為window棉胀。如果在最嚴(yán)格模式中法瑟,undefined和null就不能自動轉(zhuǎn)化為window。

var numbers = {
   numberA: 5,
   numberB: 10,
   sum: function() {
     console.log(this === numbers); // => true
     function calculate()
       console.log(this === numbers ); // => false    is window
       return this.numberA + this.numberB;
     }
     return calculate();
   }
};
numbers.sum();

在上面的代碼中唁奢,calculate中的thiswindow而不是想要的number
面對這樣的問題霎挟,我們應(yīng)該怎么辦呢?一籌莫展之際麻掸。酥夭。。


第三位大漢開口了 頭上四個大字——隱式調(diào)用

經(jīng)過激烈的言語交鋒脊奋,我算是明白了隱式調(diào)用時怎么個回事熬北,甚至都直接搞定了方法調(diào)用,咱們先說說隱式調(diào)用诚隙。

首先讶隐,隱式調(diào)用最常用的就是call,func.call(context, p1, p2)久又,我們一眼就能看出this巫延,就是傳入的第一個函數(shù)context效五。

再者,其實函數(shù)調(diào)用和方法調(diào)用都可以通過call來寫出真正的content炉峰,從而鎖定this畏妖。
函數(shù)調(diào)用:func(p1,p2) => func.call(window,p1,p2)
方法調(diào)用:obj.child.method(p1,p2) => obj.child.method.call(obj.child,p1,p2)
如此一來,一下子就變得明朗了起來疼阔。

這么一來戒劫,函數(shù)調(diào)用,方法調(diào)用竿开,隱式調(diào)用(明明是最清楚的調(diào)用谱仪,怎么叫隱式調(diào)用玻熙,這是在嘲諷否彩?)都明白了。那么還有一個構(gòu)造函數(shù)調(diào)用嗦随,改怎么說呢列荔?

構(gòu)造函數(shù)調(diào)用,移花接木惹人愁

首先是有個構(gòu)造原型枚尼,然后new了個新的函數(shù)贴浙,這個this就是新的函數(shù)了,這么簡單署恍?
對呀就這么簡單崎溃。
還有最后一個就是新出的箭頭函數(shù),本身不改變this盯质,在哪就是哪的this袁串。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市呼巷,隨后出現(xiàn)的幾起案子囱修,更是在濱河造成了極大的恐慌,老刑警劉巖王悍,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件破镰,死亡現(xiàn)場離奇詭異,居然都是意外死亡压储,警方通過查閱死者的電腦和手機鲜漩,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來集惋,“玉大人宇整,你說我怎么就攤上這事∮蟊欤” “怎么了鳞青?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵霸饲,是天一觀的道長。 經(jīng)常有香客問我臂拓,道長厚脉,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任胶惰,我火速辦了婚禮傻工,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘孵滞。我一直安慰自己中捆,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布坊饶。 她就那樣靜靜地躺著泄伪,像睡著了一般。 火紅的嫁衣襯著肌膚如雪匿级。 梳的紋絲不亂的頭發(fā)上蟋滴,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天,我揣著相機與錄音痘绎,去河邊找鬼津函。 笑死,一個胖子當(dāng)著我的面吹牛孤页,可吹牛的內(nèi)容都是我干的尔苦。 我是一名探鬼主播,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼行施,長吁一口氣:“原來是場噩夢啊……” “哼允坚!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起悲龟,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤屋讶,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后须教,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體皿渗,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年轻腺,在試婚紗的時候發(fā)現(xiàn)自己被綠了乐疆。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,040評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡贬养,死狀恐怖挤土,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情误算,我是刑警寧澤仰美,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布迷殿,位于F島的核電站,受9級特大地震影響咖杂,放射性物質(zhì)發(fā)生泄漏庆寺。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一诉字、第九天 我趴在偏房一處隱蔽的房頂上張望懦尝。 院中可真熱鬧,春花似錦壤圃、人聲如沸陵霉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽踊挠。三九已至,卻和暖如春墨叛,著一層夾襖步出監(jiān)牢的瞬間止毕,已是汗流浹背模蜡。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工漠趁, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人忍疾。 一個月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓闯传,卻偏偏與公主長得像,于是被迫代替她去往敵國和親卤妒。 傳聞我的和親對象是個殘疾皇子甥绿,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,979評論 2 355

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