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

首頁 > 語言 > JavaScript > 正文

JavaScript基礎之this詳解

2024-05-06 15:16:21
字體:
來源:轉載
供稿:網(wǎng)友

JavaScript的this和Java等面向對象語言中的this大不一樣,bind()、call()和apply()函數(shù)更是將this的靈活度進一步延伸。

為了保證可讀性,本文采用意譯而非直譯。另外,本文版權歸原作者所有,翻譯僅用于學習。

如果對JavaScript的關鍵字this理解不夠深刻,有時候會掉入意想不到的坑。在這里我們總結了5條通用規(guī)則來幫助你判斷this到底指向什么。雖然沒有囊括所有的情況,但日常大部分情況都可以使用這些規(guī)則來正確推斷。

this的值通常是由所在函數(shù)的執(zhí)行環(huán)境決定,也就是說要看函數(shù)是如何被調用的;
同一個函數(shù)每一次調用,this都可能指向不同的對象;

全局對象 (Global Object)

打開Chrome瀏覽器開發(fā)者面板(Windows: Ctrl + Shift + J)(Mac: Cmd + Option + J),并且輸入:

console.log(this);

看看輸出了什么?

// Window {}

window對象! 因為在全局作用域下,this指向全局對象。在瀏覽器中全局對象就是window對象。
為了讓你更加清楚理解為什么this會指向window對象,我們來看另外一個例子:

var myName = 'Brandon';
我們可以通過在控制臺輸入myName來訪問其值:

myName// 輸出 'Brandon'

其實,所有在全局定義的變量都綁定到window對象。我們來做如下測試:

window.myName// 輸出 'Brandon'window.myName === myName// 輸出 true

現(xiàn)在我們將this放到函數(shù)內部,看看有何效果。

function test(){ return this;}test();

你會發(fā)現(xiàn)this依然指向全局的window對象。因為this關鍵字沒有處于一個聲明的對象內部,默認指向全局window對象。這一點可能對于大部分初學者來說有點難以理解。當讀完這篇文章,你就會豁然開朗。
注意:如果在strcit模式下,上面的例子中this為undefined。

聲明的對象 (Declared Object)

當this關鍵字在一個聲明對象內部使用,其值會被綁定到調用該this的函數(shù)的最近的父對象。我們用例子來說明這個問題:

var person = { first: 'John', last: 'Smith',  full: function() {  console.log(this.first + ' ' + this.last); }};person.full();// 輸出 'John Smith'

在被聲明的對象person中的full函數(shù)里面使用了this, 那么調用this的full函數(shù)的最近的父對象就是person, 因此,this指向person。

為了更好的描述this實際上是指向person對象的,你可以拷貝如下代碼到瀏覽器控制臺,將this打印出來。

var person = { first: 'John', last: 'Smith',  full: function() {  console.log(this); }};person.full();// 輸出 Object {first: "John", last: "Smith", full: function}

我們接下來看一個更復雜的例子:

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 武鸣县| 万山特区| 诸城市| 伊春市| 彰化市| 新乐市| 邹平县| 华池县| 哈巴河县| 青岛市| 宜兰县| 桓仁| 永和县| 邯郸市| 景泰县| 万源市| 河东区| 大理市| 静海县| 宁波市| 永胜县| 周至县| 观塘区| 阜新市| 襄樊市| 内黄县| 新安县| 陈巴尔虎旗| 任丘市| 双流县| 连州市| 万年县| 梨树县| 石林| 宜城市| 陈巴尔虎旗| 宁都县| 绥阳县| 江川县| 博湖县| 安宁市|