国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

深入理解JavaScript系列(13) This? Yes,this!

2024-05-06 14:22:37
字體:
供稿:網(wǎng)友
介紹
在這篇文章里,我們將討論跟執(zhí)行上下文直接相關(guān)的更多細(xì)節(jié)。討論的主題就是this關(guān)鍵字。實(shí)踐證明,這個(gè)主題很難,在不同執(zhí)行上下文中this的確定經(jīng)常會發(fā)生問題。

許多程序員習(xí)慣的認(rèn)為,在程序語言中,this關(guān)鍵字與面向?qū)ο蟪绦蜷_發(fā)緊密相關(guān),其完全指向由構(gòu)造器新創(chuàng)建的對象。在ECMAScript規(guī)范中也是這樣實(shí)現(xiàn)的,但正如我們將看到那樣,在ECMAScript中,this并不限于只用來指向新創(chuàng)建的對象。

英文翻譯: Dmitry A. Soshnikov在Stoyan Stefanov的幫助下
發(fā)布: 2010-03-07
http://dmitrysoshnikov.com/ecmascript/chapter-3-this/

俄文原文: Dmitry A. Soshnikov
修正: Zeroglif
發(fā)布: 2009-06-28;
更新:2010-03-07
http://dmitrysoshnikov.com/ecmascript/ru-chapter-3-this/

本文絕大部分內(nèi)容參考了:http://www.denisdeng.com/?p=900
部分句子參考了:justin的中文翻譯
復(fù)制代碼
讓我們更詳細(xì)的了解一下,在ECMAScript中this到底是什么?

定義
this是執(zhí)行上下文中的一個(gè)屬性:
代碼如下:
activeExecutionContext = {
VO: {...},
this: thisValue
};

這里VO是我們前一章討論的變量對象。

this與上下文中可執(zhí)行代碼的類型有直接關(guān)系,this值在進(jìn)入上下文時(shí)確定,并且在上下文運(yùn)行期間永久不變。

下面讓我們更詳細(xì)研究這些案例:

全局代碼中的this
在這里一切都簡單。在全局代碼中,this始終是全局對象本身,這樣就有可能間接的引用到它了。
代碼如下:
// 顯示定義全局對象的屬性
this.a = 10; // global.a = 10
alert(a); // 10

// 通過賦值給一個(gè)無標(biāo)示符隱式
b = 20;
alert(this.b); // 20

// 也是通過變量聲明隱式聲明的
// 因?yàn)槿稚舷挛牡淖兞繉ο笫侨謱ο笞陨?
var c = 30;
alert(this.c); // 30

函數(shù)代碼中的this
在函數(shù)代碼中使用this時(shí)很有趣,這種情況很難且會導(dǎo)致很多問題。

這種類型的代碼中,this值的首要特點(diǎn)(或許是最主要的)是它不是靜態(tài)的綁定到一個(gè)函數(shù)。

正如我們上面曾提到的那樣,this是進(jìn)入上下文時(shí)確定,在一個(gè)函數(shù)代碼中,這個(gè)值在每一次完全不同。

不管怎樣,在代碼運(yùn)行時(shí)的this值是不變的,也就是說,因?yàn)樗皇且粋€(gè)變量,就不可能為其分配一個(gè)新值(相反,在Python編程語言中,它明確的定義為對象本身,在運(yùn)行期間可以不斷改變)。
代碼如下:
var foo = {x: 10};

var bar = {
x: 20,
test: function () {

alert(this === bar); // true
alert(this.x); // 20

this = foo; // 錯(cuò)誤,任何時(shí)候不能改變this的值

alert(this.x); // 如果不出錯(cuò)的話,應(yīng)該是10,而不是20

}

};

// 在進(jìn)入上下文的時(shí)候
// this被當(dāng)成bar對象
發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 安乡县| 德钦县| 达日县| 象山县| 沙田区| 望谟县| 西峡县| 平遥县| 银川市| 定远县| 永春县| 常山县| 拜泉县| 巨野县| 万宁市| 汨罗市| 科尔| 松潘县| 屯门区| 进贤县| 太仓市| 比如县| 七台河市| 玉树县| 屏东市| 怀宁县| 神农架林区| 阳江市| 寿宁县| 新巴尔虎左旗| 凤庆县| 甘德县| 北海市| 城口县| 古丈县| 宽甸| 无锡市| 且末县| 德清县| 会昌县| 汉源县|