js中的this指向問(wèn)題小結(jié)

最近有點(diǎn)閑暇時(shí)間片拍,就來(lái)總結(jié)js中this的指向問(wèn)題煌集,如有不對(duì),請(qǐng)指出捌省。
this指向苫纤,網(wǎng)上做多的描述是指向那個(gè)最終調(diào)用的對(duì)象。對(duì)于這句話(huà)纲缓,一直不太明白卷拘。下面我們用幾個(gè)例子來(lái)理解這個(gè)問(wèn)題。
function a(){
console.log(this.user)
};
var user = 'alisa';
a()//alisa
此時(shí)a的調(diào)用者是 window 祝高,所以會(huì)取定義在全局的user;
例子1.
function a(){
this.user = 'mfz';
console.log(this.user)
}
var user = 'alisa';
a()//mfz;

function a(){
this.user = 'mfz';
user = 'milk';
console.log(this.user)
}
var user = 'alisa';
a()//milk;
例子2.
var a ={
user:'alisa',
fn:function(){
console.log(this.user)
}
}
a.fn();//alisa

箭頭函數(shù)沒(méi)有自己的this, 它的this是繼承而來(lái); 默認(rèn)指向在定義它時(shí)所處的對(duì)象(宿主對(duì)象),而不是執(zhí)行時(shí)的對(duì)象, 定義它的時(shí)候,可能環(huán)境是window;

var a = {
user:'alisa',
fn:()=>{
console.log(this.user);
}
}栗弟;
var user = ‘mfz’;
a.fn();//mfz;

下面看下 settimeout 和setinterval 的例子
var a= {
say: function () {
setTimeout(function () {
console.log(this)
});
}
}
a.say();//window

var q= {
say: function () {
setTimeout(() => {
console.log(this)
});
}
}
q.say(); // say()

此時(shí)的 this繼承自q, 指的是定義它的對(duì)象q, 而不是 window!

{
console.log(1,this);//1,window
var xx = "bb"
var obj={
xx:"aa",
foo:()=>{
console.log(2,this,this.xx);//2工闺,window 乍赫,bb
}
};
obj.foo()// 此時(shí)的this是和 console.log(1,this); 指向一致 所以會(huì)打出 bb 而不是aa
}

如果不是箭頭函數(shù)

{
console.log(1,this);//1,window
var xx = "bb"
var obj={
xx:"aa",
foo:function(){
console.log(2,this,this.xx);//2,obj陆蟆,aa
}
};
obj.foo()// 此時(shí)的this是指向的obj 所以會(huì)打印出 aa
}

當(dāng)有對(duì)象形式聲明函數(shù)時(shí)雷厂,不存在作用域,里面的匿名函數(shù)始終與 最外層指向一致叠殷,通過(guò)call pllay bind 一些也無(wú)法改變其指向
{
console.log(1,this);
var xx = "bb";
var obj={
xx:"aa",
foo:()=>{
console.log(2,this,this.xx);
}
};

 var obj2 = {xx:"obj2-xx"}
 obj.foo.call(obj2)//無(wú)法改變其指向改鲫,還是和console.log(1,this)同一層 

}

{
console.log(1,this);
var xx = "bb";
var obj={
xx:"aa",
foo:function(){
console.log(2,this,this.xx);
}
};

var obj2 = {xx:"obj2-xx"}
 obj.foo.call(obj2)//指向改變 溪猿,打印出 2钩杰,obj2,obj2-xx

}

但是在函數(shù)作用域內(nèi)情況就不一樣了 。

下面看兩個(gè)例子
//普通函數(shù)
function foo(){
setTimeout(function(){
console.log(this.id);// 22诊县,指向window
},100);
console.log(this.id)//43 函數(shù)作用域問(wèn)題,只有外面一層受影響
}
var id = 22;
foo.call({id:43});//22 ,43 foo的調(diào)用函數(shù)始終指向window

//箭頭函數(shù)
function foo(){
    setTimeout(() => {
        console.log(this.id);//id 是指向foo父級(jí)
    },100);
}
var id = 22;
foo.call({id:43});//43
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末措左,一起剝皮案震驚了整個(gè)濱河市依痊,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖胸嘁,帶你破解...
    沈念sama閱讀 211,948評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件瓶摆,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡性宏,警方通過(guò)查閱死者的電腦和手機(jī)群井,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,371評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)毫胜,“玉大人书斜,你說(shuō)我怎么就攤上這事〗褪梗” “怎么了荐吉?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,490評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀(guān)的道長(zhǎng)口渔。 經(jīng)常有香客問(wèn)我样屠,道長(zhǎng),這世上最難降的妖魔是什么缺脉? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,521評(píng)論 1 284
  • 正文 為了忘掉前任痪欲,我火速辦了婚禮,結(jié)果婚禮上攻礼,老公的妹妹穿的比我還像新娘勤揩。我一直安慰自己,他們只是感情好秘蛔,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,627評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布陨亡。 她就那樣靜靜地躺著,像睡著了一般深员。 火紅的嫁衣襯著肌膚如雪负蠕。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,842評(píng)論 1 290
  • 那天倦畅,我揣著相機(jī)與錄音遮糖,去河邊找鬼。 笑死叠赐,一個(gè)胖子當(dāng)著我的面吹牛欲账,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播芭概,決...
    沈念sama閱讀 38,997評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼赛不,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了罢洲?” 一聲冷哼從身側(cè)響起踢故,我...
    開(kāi)封第一講書(shū)人閱讀 37,741評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后殿较,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體耸峭,經(jīng)...
    沈念sama閱讀 44,203評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,534評(píng)論 2 327
  • 正文 我和宋清朗相戀三年淋纲,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了劳闹。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,673評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡洽瞬,死狀恐怖本涕,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情片任,我是刑警寧澤偏友,帶...
    沈念sama閱讀 34,339評(píng)論 4 330
  • 正文 年R本政府宣布,位于F島的核電站对供,受9級(jí)特大地震影響位他,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜产场,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,955評(píng)論 3 313
  • 文/蒙蒙 一鹅髓、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧京景,春花似錦窿冯、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,770評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至鄙皇,卻和暖如春芜赌,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背伴逸。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,000評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工缠沈, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人错蝴。 一個(gè)月前我還...
    沈念sama閱讀 46,394評(píng)論 2 360
  • 正文 我出身青樓洲愤,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親顷锰。 傳聞我的和親對(duì)象是個(gè)殘疾皇子柬赐,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,562評(píng)論 2 349

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

  • 葡萄藤PPT JS中this的指向 大家好,我是IT修真院鄭州分院第6期的學(xué)員王棟馍惹,一枚正直躺率、純潔玛界、善良的前端程序...
    17064閱讀 620評(píng)論 0 2
  • 工廠(chǎng)模式類(lèi)似于現(xiàn)實(shí)生活中的工廠(chǎng)可以產(chǎn)生大量相似的商品万矾,去做同樣的事情悼吱,實(shí)現(xiàn)同樣的效果;這時(shí)候需要使用工廠(chǎng)模式。簡(jiǎn)單...
    舟漁行舟閱讀 7,726評(píng)論 2 17
  • 前言 最先接觸編程的知識(shí)是在大學(xué)里面,大學(xué)里面學(xué)了一些基礎(chǔ)的知識(shí)薪丁,c語(yǔ)言遇西,java語(yǔ)言,單片機(jī)的匯編語(yǔ)言等严嗜;大學(xué)畢...
    oceanfive閱讀 3,049評(píng)論 0 7
  • 在面向?qū)ο蟮恼Z(yǔ)言中(例如Java,C#等)粱檀,this含義是明確且具體的,即指向當(dāng)前對(duì)象漫玄。一般在編譯期綁定茄蚯。而在ja...
    一木_qintb閱讀 397評(píng)論 0 0
  • 與其他語(yǔ)言相比,函數(shù)的this關(guān)鍵字在JavaScript中的表現(xiàn)略有不同睦优,此外渗常,在嚴(yán)格模式和非嚴(yán)格模式之間也會(huì)有...
    codingC閱讀 568評(píng)論 0 0