this學(xué)習(xí)

在前端javascript中兵怯,最難理解的就是this的指向問(wèn)題,這也是面試中最常見(jiàn)的問(wèn)題腔剂。那就看下this存在哪些場(chǎng)景中媒区。

先來(lái)看下幾個(gè)場(chǎng)景

存在對(duì)象之中
 var name = 'window_leon'
 var obj = {
     name:'leon',
     fn:function(){
         console.log(this.name);
     }
 };
obj.fn();  
這時(shí)候斷點(diǎn)this的時(shí)候,this顯示的是對(duì)象obj掸犬⊥噤觯可以獲取到對(duì)象的name和fn,所以最后控制臺(tái)輸出的是leon湾碎。再來(lái)看下在普通函數(shù)之中的this宙攻。
var age = '33333';
var getAge = function(){
    console.log(this.age);
}
getAge();
執(zhí)行普通函數(shù)時(shí),打印出33333介褥。此時(shí)的this指向的對(duì)象是window全局座掘。再來(lái)看下在構(gòu)造函數(shù)的時(shí)候。
function People(city){
    this.city = city;
};

var p = new People('suzhou');
console.log(p.city);
調(diào)試發(fā)現(xiàn)在構(gòu)造函數(shù)中的this指向的是當(dāng)前構(gòu)造函數(shù),city屬性又掛載在People的原型鏈上柔滔,所以p.city相當(dāng)于People.city溢陪。

從上面3個(gè)簡(jiǎn)單的栗子中可以總結(jié)出一個(gè)規(guī)律,在javascript中的this睛廊,始終指向那個(gè)最后調(diào)用的那個(gè)對(duì)象形真。對(duì)象中的obj.fn()指向了obj;普通函數(shù)中的getAge()相當(dāng)于window.getAge(),所以最后的this指向了window超全;

知道了this的指向咆霜,下面就是如何改變this的指向邓馒。在js中改變this的指向主要使用的就是call,apply和bind三種方法

使用區(qū)別

傳遞參數(shù)時(shí),apply是使用數(shù)組的形式來(lái)傳遞裕便。調(diào)用觸發(fā)時(shí)绒净,bind需要手動(dòng)觸發(fā)函數(shù)见咒。
var obj1 = {
    name:'leon1',
    age:23
};

var obj2 = {
    name:'leon2',
    age:33
};

var demo = {
    name:'demo',
    fn:function(){
        console.log(this.name);
    }
};

var test = {
    fn:function(a,b){
        console.log(this.name+"++++++"+a+"==========="+b);
    }
};

test.fn.call(obj1,1,2);

test.fn.apply(obj2,[2,3]);

test.fn.bind(obj1,4,5)();



demo.fn();//demo

demo.fn.call(obj1);//leon1

demo.fn.apply(obj2);//leon2

demo.fn.bind(obj1)();//leon1
三者的第一個(gè)參數(shù)都是傳遞你需要指向的對(duì)象偿衰,后面是傳遞的參數(shù)。在使用bind的時(shí)候需要注意下兼容性主流都支持改览,IE11才開(kāi)始支持這個(gè)方法下翎。

其他改變指向方法

var other = {
    test:'1234',
    fn:function(){
        // var self = this;
        setTimeout(function(){
            // console.log(self.test);
            console.log(this.test);
        },100)
    }
}
other.fn();
在settimeout中,由于是window調(diào)用setTimeOut宝当,所以this指向了window,輸出的結(jié)果undefined视事。如果執(zhí)行var self = this時(shí),this的指向?yàn)閛ther對(duì)象庆揩,通過(guò)self變量保存起來(lái)俐东。此時(shí)在setTimeOut中使用self.test時(shí),從other對(duì)象中找到test订晌。ES6中的箭頭函數(shù)中虏辫,this的使用則完全顛覆上面所說(shuō)的this始終指向最后調(diào)用它的對(duì)象。在箭頭函數(shù)中锈拨,this綁定按照所在函數(shù)在哪個(gè)對(duì)象下面砌庄,多層嵌套下,this指向最外層奕枢。
如果有寫的不對(duì)的娄昆,理解錯(cuò)的請(qǐng)指出,謝謝
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末缝彬,一起剝皮案震驚了整個(gè)濱河市萌焰,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌谷浅,老刑警劉巖扒俯,帶你破解...
    沈念sama閱讀 216,372評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異壳贪,居然都是意外死亡陵珍,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門违施,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)互纯,“玉大人,你說(shuō)我怎么就攤上這事磕蒲×袅剩” “怎么了只盹?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,415評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)兔院。 經(jīng)常有香客問(wèn)我殖卑,道長(zhǎng),這世上最難降的妖魔是什么坊萝? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,157評(píng)論 1 292
  • 正文 為了忘掉前任孵稽,我火速辦了婚禮,結(jié)果婚禮上十偶,老公的妹妹穿的比我還像新娘菩鲜。我一直安慰自己,他們只是感情好惦积,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布接校。 她就那樣靜靜地躺著,像睡著了一般狮崩。 火紅的嫁衣襯著肌膚如雪蛛勉。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,125評(píng)論 1 297
  • 那天睦柴,我揣著相機(jī)與錄音诽凌,去河邊找鬼。 笑死爱只,一個(gè)胖子當(dāng)著我的面吹牛皿淋,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播恬试,決...
    沈念sama閱讀 40,028評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼窝趣,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了训柴?” 一聲冷哼從身側(cè)響起哑舒,我...
    開(kāi)封第一講書(shū)人閱讀 38,887評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎幻馁,沒(méi)想到半個(gè)月后洗鸵,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,310評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡仗嗦,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評(píng)論 2 332
  • 正文 我和宋清朗相戀三年膘滨,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片稀拐。...
    茶點(diǎn)故事閱讀 39,690評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡火邓,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情铲咨,我是刑警寧澤躲胳,帶...
    沈念sama閱讀 35,411評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站纤勒,受9級(jí)特大地震影響坯苹,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜摇天,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評(píng)論 3 325
  • 文/蒙蒙 一粹湃、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧闸翅,春花似錦再芋、人聲如沸菊霜。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)鉴逞。三九已至记某,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間构捡,已是汗流浹背液南。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,812評(píng)論 1 268
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留勾徽,地道東北人滑凉。 一個(gè)月前我還...
    沈念sama閱讀 47,693評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像喘帚,于是被迫代替她去往敵國(guó)和親畅姊。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評(píng)論 2 353

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