javascript中的this


This對象在js中就一直是個坑貨酌毡,很難判斷它到底指向什么唾那,而我們由于來自C++或者python的self的經(jīng)驗刘离,又常常會犯這一類的錯誤歇式。接下來就詳細地講一下this對象的歸屬。

rule1:全局環(huán)境的this

javascript的環(huán)境天生就由函數(shù)來決定牙捉,在js里不能通過代碼塊隔開上下文,不被函數(shù)所包裹的環(huán)境就是全局環(huán)境敬飒,全局環(huán)境中的this就指向全局變量window邪铲,看下面一個例子

var name='jjj';
console.log(this.name);
//會成功輸出jjj

rule2:作為方法調(diào)用時的this

顯然這種情況很好判斷,與python里的self是一致的无拗,this毫無疑問指向調(diào)用方法的對象

var user={
    name:'kkk'
};
user.getName=function(){
    console.log(this.name);
};
user.getName();
//會輸出kkk

rule3:作為構(gòu)造函數(shù)時的this

這時的this也不用我多說带到,顯然是指向新創(chuàng)建的對象,構(gòu)造函數(shù)的運行其實并不創(chuàng)建對象英染,而僅僅是初始化揽惹,對象在運行之前就已經(jīng)被創(chuàng)建
下面還是舉例說明

function User(name){
    this.name=name;
}
var f1=new User('kkk');
var f2=User('kkk');
console.log(f1.name);//kkk
console.log(f2.name);//undefined沒有name屬性

rule4:間接調(diào)用中的this

所謂間接調(diào)用是指利用apply和call來調(diào)用函數(shù),這時的this指向它們參數(shù)列表中的第一個參數(shù)四康。

var setName=function(name){
    this.name=name;
};
var user={level:2};
user.apply(setName,'jjj');
console.log(user.name);//jjj

rule5:其他情況中的this

記住其他情況下this均不會被改變搪搏,這里也是最容易犯錯的地方。

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

上面的代碼看起來很奇怪闪金,難道this不應(yīng)該指向person嗎疯溺?
我們應(yīng)該記住被嵌套的函數(shù)中的this是不會指向嵌套它的函數(shù),在這個例子里面就是sayhello中的this不會指向hello對應(yīng)的那個函數(shù)哎垦。如果我們把例子稍稍改一下變成

hello:function(sth){
    console.log(this.name + " says " + sth);
}
//foocoder says hello world

大家應(yīng)該已經(jīng)看明白了囱嫩,這個時候,sayhello并非在作為方法調(diào)用漏设,所以this指向全局對象墨闲。。郑口。
這時候問題來了鸳碧,用node運行最初的例子會顯示undefined says hello world,不知道有沒有大神講解一下犬性。

rule6:eval破壞所有規(guī)則

最后以一個例子結(jié)束

var name = "clever coder";
var user={
    name:'kkk'
};
user.getName=function(){
    console.log(this.name);
};
var get=user.getName;
get();//clever coder

大家是否明白了杆兵?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市仔夺,隨后出現(xiàn)的幾起案子琐脏,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,743評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件日裙,死亡現(xiàn)場離奇詭異吹艇,居然都是意外死亡,警方通過查閱死者的電腦和手機昂拂,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,296評論 3 385
  • 文/潘曉璐 我一進店門受神,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人格侯,你說我怎么就攤上這事鼻听。” “怎么了联四?”我有些...
    開封第一講書人閱讀 157,285評論 0 348
  • 文/不壞的土叔 我叫張陵撑碴,是天一觀的道長。 經(jīng)常有香客問我朝墩,道長醉拓,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,485評論 1 283
  • 正文 為了忘掉前任收苏,我火速辦了婚禮亿卤,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘鹿霸。我一直安慰自己排吴,他們只是感情好,可當我...
    茶點故事閱讀 65,581評論 6 386
  • 文/花漫 我一把揭開白布懦鼠。 她就那樣靜靜地躺著傍念,像睡著了一般。 火紅的嫁衣襯著肌膚如雪葛闷。 梳的紋絲不亂的頭發(fā)上憋槐,一...
    開封第一講書人閱讀 49,821評論 1 290
  • 那天,我揣著相機與錄音淑趾,去河邊找鬼阳仔。 笑死,一個胖子當著我的面吹牛扣泊,可吹牛的內(nèi)容都是我干的近范。 我是一名探鬼主播,決...
    沈念sama閱讀 38,960評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼延蟹,長吁一口氣:“原來是場噩夢啊……” “哼评矩!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起阱飘,我...
    開封第一講書人閱讀 37,719評論 0 266
  • 序言:老撾萬榮一對情侶失蹤斥杜,失蹤者是張志新(化名)和其女友劉穎虱颗,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蔗喂,經(jīng)...
    沈念sama閱讀 44,186評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡忘渔,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,516評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了缰儿。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片畦粮。...
    茶點故事閱讀 38,650評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖乖阵,靈堂內(nèi)的尸體忽然破棺而出宣赔,到底是詐尸還是另有隱情,我是刑警寧澤瞪浸,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布儒将,位于F島的核電站,受9級特大地震影響默终,放射性物質(zhì)發(fā)生泄漏椅棺。R本人自食惡果不足惜犁罩,卻給世界環(huán)境...
    茶點故事閱讀 39,936評論 3 313
  • 文/蒙蒙 一齐蔽、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧床估,春花似錦含滴、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,757評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至递胧,卻和暖如春碑韵,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背缎脾。 一陣腳步聲響...
    開封第一講書人閱讀 31,991評論 1 266
  • 我被黑心中介騙來泰國打工祝闻, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人遗菠。 一個月前我還...
    沈念sama閱讀 46,370評論 2 360
  • 正文 我出身青樓联喘,卻偏偏與公主長得像,于是被迫代替她去往敵國和親辙纬。 傳聞我的和親對象是個殘疾皇子豁遭,可洞房花燭夜當晚...
    茶點故事閱讀 43,527評論 2 349

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