Javascript中的this取值

強調(diào):在函數(shù)中this到底取何值震檩,是在函數(shù)真正被調(diào)用執(zhí)行的時候確定的乃摹,函數(shù)定義的時候確定不了。因為this的取值是執(zhí)行上下文環(huán)境的一部分是目,每次調(diào)用函數(shù),都會產(chǎn)生一個新的執(zhí)行上下文環(huán)境标捺。

this的取值分四種情況:

1.構造函數(shù):所謂構造函數(shù)就是用來new對象的函數(shù)懊纳。嚴格來說,所有的函數(shù)都可以new一個對象亡容,但有些函數(shù)的定義是為了new一個對象嗤疯,而有些不是。另外注意闺兢,構造函數(shù)的函數(shù)名第一個字母大寫(規(guī)則約定)茂缚,例如:Object,Array屋谭,F(xiàn)unction等脚囊。
function Foo(){
this.name = 'xx',
this.age = 1988
console.log(this) //Foo {name:'xx',age:1988}
}
var f1 = new Foo();//new構造函數(shù)時this取值為它即將new出來的對象

function Foo() {
this.name = 'xx',
this.age = 1988,
console.log(this) //Window
}
Foo() //直接調(diào)用構造函數(shù)的時候this取值為window

在構造函數(shù)的prototype中桐磁,this代表什么悔耘??
function Fn() {
this.name = 'xx';
this.year = 1988
}
Fn.prototype.getName = function(){
console.log(this.name);
}
var f1 = new Fn();
f1.getName(); //xx
在Fn.prototype.getName函數(shù)中我擂,this執(zhí)行的是f1對象衬以。因此可以通過this.name獲取f1.name的值
其實缓艳,不僅僅是構造函數(shù)的prototype,即便是在整個原型鏈中泄鹏,this代表的也都是當前對象的值郎任。

2.函數(shù)作為對象的一個屬性
如果函數(shù)作為對象的一個屬性,并且作為對象的一個屬性被調(diào)用時备籽,函數(shù)中的this指向該對象舶治。
var obj = {
x:10;
fn:function() {
console.log(this); //Object(x:10,fn:function);
console.log(this.x) //10
}
}
obj.fn() //調(diào)用時this才取值

如果fn函數(shù)不作為obj的一個屬性被調(diào)用,
var obj = {
x:10;
fn:function(){
console.log(this) //window
console.log(this.x) //undefined
}
}
var fn1 = obj.fn;
fn1() //調(diào)用時this開始取值车猬。
如果fn函數(shù)被復制到另一個變量中霉猛,并沒有作為obj的一個屬性被調(diào)用,那么this的值就是window珠闰。

3.函數(shù)用call或者apply調(diào)用
當一個函數(shù)被call和apply調(diào)用時惜浅,this的值就取傳入的對象的值。
var obj = {
x:10
}
var fn = function(){
console.log(this); //Object {x:10}
console.log(this.x) //10
}
fn.call(obj) //調(diào)用時this才取值

4.全局或者調(diào)用普通函數(shù)
在全局環(huán)境下伏嗜,this永遠是window
普通函數(shù)在調(diào)用時坛悉,this也是window
var x = 10;
var fn = function(){
console.log(this) //window
console.log(this.x) //10
}
fn()承绸;

var obj = {
x:10裸影,
fn:function(){
function f(){
console.log(this) //window
console.log(this.x) //undefined
}
f();
}
}
obj.fn() //調(diào)用時this開始取值
雖然函數(shù)f是在obj.fn內(nèi)部定義的军熏,但是它仍然是一個普通函數(shù)轩猩,this指向window。

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末荡澎,一起剝皮案震驚了整個濱河市均践,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌摩幔,老刑警劉巖彤委,帶你破解...
    沈念sama閱讀 206,378評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異或衡,居然都是意外死亡焦影,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評論 2 382
  • 文/潘曉璐 我一進店門薇宠,熙熙樓的掌柜王于貴愁眉苦臉地迎上來偷办,“玉大人艰额,你說我怎么就攤上這事澄港。” “怎么了柄沮?”我有些...
    開封第一講書人閱讀 152,702評論 0 342
  • 文/不壞的土叔 我叫張陵回梧,是天一觀的道長废岂。 經(jīng)常有香客問我,道長狱意,這世上最難降的妖魔是什么湖苞? 我笑而不...
    開封第一講書人閱讀 55,259評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮详囤,結果婚禮上财骨,老公的妹妹穿的比我還像新娘。我一直安慰自己藏姐,他們只是感情好隆箩,可當我...
    茶點故事閱讀 64,263評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著羔杨,像睡著了一般捌臊。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上兜材,一...
    開封第一講書人閱讀 49,036評論 1 285
  • 那天理澎,我揣著相機與錄音,去河邊找鬼曙寡。 笑死糠爬,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的卵皂。 我是一名探鬼主播秩铆,決...
    沈念sama閱讀 38,349評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼灯变!你這毒婦竟也來了殴玛?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 36,979評論 0 259
  • 序言:老撾萬榮一對情侶失蹤添祸,失蹤者是張志新(化名)和其女友劉穎滚粟,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體刃泌,經(jīng)...
    沈念sama閱讀 43,469評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡凡壤,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,938評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了耙替。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片亚侠。...
    茶點故事閱讀 38,059評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖俗扇,靈堂內(nèi)的尸體忽然破棺而出硝烂,到底是詐尸還是另有隱情,我是刑警寧澤铜幽,帶...
    沈念sama閱讀 33,703評論 4 323
  • 正文 年R本政府宣布滞谢,位于F島的核電站串稀,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏狮杨。R本人自食惡果不足惜母截,卻給世界環(huán)境...
    茶點故事閱讀 39,257評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望橄教。 院中可真熱鬧清寇,春花似錦、人聲如沸护蝶。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽滓走。三九已至垦江,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間搅方,已是汗流浹背比吭。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留姨涡,地道東北人衩藤。 一個月前我還...
    沈念sama閱讀 45,501評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像涛漂,于是被迫代替她去往敵國和親赏表。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,792評論 2 345

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

  • 工廠模式類似于現(xiàn)實生活中的工廠可以產(chǎn)生大量相似的商品匈仗,去做同樣的事情瓢剿,實現(xiàn)同樣的效果;這時候需要使用工廠模式。簡單...
    舟漁行舟閱讀 7,718評論 2 17
  • 單例模式 適用場景:可能會在場景中使用到對象悠轩,但只有一個實例间狂,加載時并不主動創(chuàng)建,需要時才創(chuàng)建 最常見的單例模式火架,...
    Obeing閱讀 2,056評論 1 10
  • Javascript 中的 this鉴象,有時候讓人迷惑,所以總結了一下關于this指向的問題何鸡。 在函數(shù)中 this ...
    lxt410725閱讀 460評論 0 1
  • 與其他語言相比纺弊,函數(shù)的this關鍵字在JavaScript中的表現(xiàn)略有不同,此外骡男,在嚴格模式和非嚴格模式之間也會有...
    codingC閱讀 565評論 0 0
  • Lua 5.1 參考手冊 by Roberto Ierusalimschy, Luiz Henrique de F...
    蘇黎九歌閱讀 13,742評論 0 38