javascript中的this

在javascript中的this大致可以理解成誰(shuí)調(diào)用的this就指向誰(shuí)

全局環(huán)境中的this
alert(this);//window
函數(shù)中的this
var name = 'tom';
function say(){
  var name = 'bob'
  alert(this.name);
}
say();//tom

調(diào)用say()等價(jià)于window.say(),所以this最終指向window

對(duì)象中的this
var name = 'tom';
var obj = {
  name: 'bob',
  say: function(){
    alert(this.name);
  }
}
//第一種調(diào)用形式
obj.say();//bob; 對(duì)象直接調(diào)用所以this指向obj
//第二種調(diào)用形式
var tSay = obj.say;
tSay();//tom; 最終tSay還是通過(guò)window調(diào)用偏螺,所以最終this指代window對(duì)象
做為構(gòu)造函數(shù)中的this
function A(){
  console.log(this);
}
var a = new A();// function A(){console.log(this)}
函數(shù)中的函數(shù)的this
var name = 'tom';
var obj = {
  name: 'bob',
  say: function(){
    function _say(){
      alert(this.name);
    }
    _say();
  }
}
obj.say();//tom 最終調(diào)用_say的是window 所以this指向window
apply肯尺、call可以改變this指向
var obj1 = {
  name: 'tom'
}
var obj2 = {
  name: 'bob',
  say: function(){
    alert(this.name);
  }
}
obj2.say.call(obj1);//tom 最終this指向obj1
obj2.say.apply(obj1);//tom 最終this指向obj1

通過(guò)apply无蜂、call可以改變this指向
call和apply實(shí)現(xiàn)的功能是相同,區(qū)別在于傳參部分

call( thisArg [, arg1,arg2, … ] );  // 參數(shù)列表粟害,arg1掉房,arg2茧跋,...  
apply(thisArg [, argArray] );     // 參數(shù)數(shù)組,argArray 
在點(diǎn)擊事件中的this
<div id="button">點(diǎn)擊</div>
var obj = {
  name: 'bob',
  say: function(){
    alert(this.name);
  }
}
let oButton = document.getElementById('button');
oButton.onclick = obj.say;//undefined 因?yàn)樽罱K調(diào)用say的是oButton卓囚,oButton沒(méi)有定義name屬性所以最終結(jié)果是undefined

我們可以通過(guò)ES5中引入的bind方法來(lái)解決這個(gè)問(wèn)題

oButton.onclick = obj.say.bind(obj);//強(qiáng)制綁定obj.say的this指向?yàn)閛bj瘾杭,所以最終結(jié)果是bob;

我們可以自己模擬bind方法,比如:

Function.prototype.bind = function(){  
  var fn = this, args = Array.prototype.slice.call(arguments), object = args.shift();  
  return function(){  
    return fn.apply(object,  
      args.concat(Array.prototype.slice.call(arguments)));  
  };  
};
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末哪亿,一起剝皮案震驚了整個(gè)濱河市粥烁,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌锣夹,老刑警劉巖页徐,帶你破解...
    沈念sama閱讀 212,454評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異银萍,居然都是意外死亡变勇,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)搀绣,“玉大人飞袋,你說(shuō)我怎么就攤上這事×椿迹” “怎么了巧鸭?”我有些...
    開(kāi)封第一講書人閱讀 157,921評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)麻捻。 經(jīng)常有香客問(wèn)我纲仍,道長(zhǎng),這世上最難降的妖魔是什么贸毕? 我笑而不...
    開(kāi)封第一講書人閱讀 56,648評(píng)論 1 284
  • 正文 為了忘掉前任郑叠,我火速辦了婚禮,結(jié)果婚禮上明棍,老公的妹妹穿的比我還像新娘乡革。我一直安慰自己,他們只是感情好摊腋,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,770評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布沸版。 她就那樣靜靜地躺著,像睡著了一般兴蒸。 火紅的嫁衣襯著肌膚如雪视粮。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 49,950評(píng)論 1 291
  • 那天橙凳,我揣著相機(jī)與錄音馒铃,去河邊找鬼。 笑死痕惋,一個(gè)胖子當(dāng)著我的面吹牛区宇,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播值戳,決...
    沈念sama閱讀 39,090評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼议谷,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了堕虹?” 一聲冷哼從身側(cè)響起卧晓,我...
    開(kāi)封第一講書人閱讀 37,817評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎赴捞,沒(méi)想到半個(gè)月后逼裆,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,275評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡赦政,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,592評(píng)論 2 327
  • 正文 我和宋清朗相戀三年胜宇,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了耀怜。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,724評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡桐愉,死狀恐怖财破,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情从诲,我是刑警寧澤左痢,帶...
    沈念sama閱讀 34,409評(píng)論 4 333
  • 正文 年R本政府宣布,位于F島的核電站系洛,受9級(jí)特大地震影響俊性,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜描扯,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,052評(píng)論 3 316
  • 文/蒙蒙 一磅废、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧荆烈,春花似錦、人聲如沸竟趾。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,815評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)岔帽。三九已至玫鸟,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間犀勒,已是汗流浹背屎飘。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,043評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留贾费,地道東北人钦购。 一個(gè)月前我還...
    沈念sama閱讀 46,503評(píng)論 2 361
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像褂萧,于是被迫代替她去往敵國(guó)和親押桃。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,627評(píng)論 2 350

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

  • 1.概念 在JavaScript中导犹,this 是指當(dāng)前函數(shù)中正在執(zhí)行的上下文環(huán)境唱凯,因?yàn)檫@門語(yǔ)言擁有四種不同的函數(shù)調(diào)...
    BluesCurry閱讀 1,127評(píng)論 0 2
  • 導(dǎo)語(yǔ) 不得不說(shuō),作為一名初級(jí)的前端開(kāi)發(fā)者谎痢,this關(guān)鍵字這個(gè)問(wèn)題對(duì)于我來(lái)說(shuō)一直是一個(gè)痛點(diǎn)磕昼,什么是this?什么是函...
    Nicole_tiny閱讀 530評(píng)論 0 4
  • 在初階段我看js中的時(shí)候簡(jiǎn)直就是一臉蒙B节猿,跟現(xiàn)在的棒子國(guó)的女人一樣票从,看來(lái)看去都是一個(gè)樣,但是根本上還是不知道出自那...
    Ziksang閱讀 741評(píng)論 2 10
  • this this是javascript的一個(gè)關(guān)鍵字,隨著函數(shù)使用場(chǎng)合不同纫骑,this的值會(huì)發(fā)生變化蝎亚。但是總有一個(gè)原...
    西瓜w閱讀 374評(píng)論 0 0
  • “你有這干凈的像琉璃一樣的眼睛,真好看先馆》⒖颍” “那你有什么?別說(shuō)你有我煤墙,會(huì)惡心吐的梅惯。” “我什么都沒(méi)有仿野,通透自由铣减。”...
    鐵血路人麻麻桑閱讀 281評(píng)論 0 0