首頁 web前端 js教程 JS中的this變數的使用介紹_基礎知識

JS中的this變數的使用介紹_基礎知識

May 16, 2016 pm 05:19 PM
js this

JavaScript中this的使用

在JavaScript中this變數是一個令人難以摸清的關鍵字,this可謂是非常強大,充分了解this的相關知識有助於我們在編寫物件導向的JavaScript程序時能夠游刃有餘。

對於this變數最要的是能夠釐清this所引用的物件到底是哪一個,也許很多資料上都有自己的解釋,但有些概念講的偏繁雜。而我的理解是:首先分析this所在的函數是當做哪個物件的方法呼叫的,則該物件就是this所引用的物件。

範例一、

複製程式碼 程式碼如下:


程式碼如下:



obj.x = 100;
obj.y = function(){ alert( this.x ); };

obj.y(); //彈出100

這段程式碼非常容易理解,當執行obj.y() 時,函數是作為對象obj的方法調用的,因此函數體內的this指向的是obj對象,所以會彈出100。 範例二、
複製程式碼


程式碼如下:
alert( this.x);

};

var x = 'this is a property of window';

varvar obj = {};

obj.x = 100;

obj.y = function(){ alert( this.x ); };

obj.y( ); //彈出100

checkThis(); //彈出'this is a property of window'


這裡為什麼會彈出'this is a property of window',可能有些讓人迷惑。在JavaScript的變數作用域裡有一條規則「全域變數都是window物件的屬性」。當執行checkThis() 時相當於window.checkThis(),因此,此時checkThis函數體內的this關鍵字的指向變成了window對象,而又因為window對象又一個x屬性('thisis a property of window' ),所以會彈出'thisis a property of window'。

上面的兩個例子都是比較容易理解的,因為只要判斷出當前函數是作為哪個對象的方法調用(被哪個對象調用)的,就可以很容易的判斷出當前this變量的指向。

this.x 與apply()、call()

透過call和apply可以重新定義函數的執行環境,即this的指向,這對於一些應用當中是十分常用的。

範例三:call() 程式碼如下:



程式碼如下:



程式碼如下:



程式碼如下:


程式碼如下:

程式碼如下:
this.style[ type ] = value;

}

var one = document.getElementByIdx( '); >
changeStyle.call( one , 'fontSize' , '100px' );

changeStyle('fontSize' , '300px'); //出現錯誤,因為此時changeStyle中this引用的是window對象,而window並無style屬性。


注意changeStyle.call()中有三個參數,第一個參數用來指定函數會被哪個物件所呼叫。這裡指定了one,也就意味著,changeStyle函數將被one調用,因此函數體內this指向是one物件。而第二個和第三個參數對應的是changeStyle函數裡的type和value兩個形參。最總是我們看到的效果是Dom元素one的字體變成了20px。

範例四:apply()



複製程式碼


程式碼如下: 程式碼如下:



程式碼如下:




this.style[ type ] = value;

}

var one = document.getElementByIdx( '); >
changeStyle.apply( one , ['fontSize' , '100px' ]);

changeStyle('fontSize' , '300px'); //出現錯誤,原因同例三

apply的用法和call大致相同,只有一點區別,apply只接受兩個參數,第一個參數和call相同,第二個參數必須是一個數組,數組中的元素對應的就是函數的形參。 無意義(詭異)的this用處範例五: 複製程式碼複製程式碼複製程式碼複製程式碼複製程式碼複製程式碼複製程式碼複製程式碼複製程式碼 var obj = { x : 100, y : function(){ set >function(){ alert(this.x); } //這裡的this指向的是window對象,並不是我們期待的obj,所以會彈出undefined , 2000); } }; obj.y();
如何達到預期的效果
複製程式碼 程式碼如下:

var🎜> 程式碼如下:


var obj = {

x : 100,

y : function(){

var that = this;

setTimeout(


, 2000);

}

};

obj.y(); //1000
事件監聽函數中的this 複製程式碼

程式碼如下:

var one = document.getElementByIdx( 'one' );

one.onclick = function(){

alert( this.innerHTML ); //this指向的是one元素元素,這點十分簡單..
};


注意:js中的全域變數都會動態加入Window 的實例window,作為其屬性。

this是js的一個關鍵字,隨著函數使用場合不同,this的值會改變。但是總有一個原則,那就是this指的是呼叫函數的那個物件。
1、純粹函數呼叫。 複製程式碼
程式碼如下:


function test() {
this
this. = 1;
alert(x);
}
test();
其實這裡的this就是全域變數。看下面的例子就能很好的理解其實this就是全域物件Global。 複製程式碼

程式碼如下:


var x = 1;
function test(test()) {
alert(this.x);
}
test();//1

var x = 1;
function test() {
this.x = 0;
}
test();
alert(x);//0
2、作為方法調用,那麼this就是指這個上級物件。 複製程式碼

程式碼如下:


function test(this) {


function test(this) {
alert(this. x);
}

var o = {};
o.x = 1;
o.m = test; o.m(); //1 o.m(); //1
o.m(); //1


o.m(); //1


o.m(); //1

3、作為建構函式呼叫。所謂建構函數,就是生成一個新的物件。這時,這個this就是指這個物件。


複製程式碼 程式碼如下:
function test() {
this
this. = 1;
}
var o = new test();
alert(o.x);//1


4、apply呼叫

this指向的是apply中的第一個參數。


複製程式碼 程式碼如下: var x = 0 function test(test()) { alert(this.x); } var o = {}; o.x = 1; o.m = test; o.m.apply(); / /0 o.m.apply(o);//1 當apply沒有參數時,表示為全域物件。所以值為0。
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前 By 尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

如何使用JS和百度地圖實現地圖平移功能 如何使用JS和百度地圖實現地圖平移功能 Nov 21, 2023 am 10:00 AM

如何使用JS和百度地圖實現地圖平移功能

股票分析必備工具:學習PHP和JS繪製蠟燭圖的步驟 股票分析必備工具:學習PHP和JS繪製蠟燭圖的步驟 Dec 17, 2023 pm 06:55 PM

股票分析必備工具:學習PHP和JS繪製蠟燭圖的步驟

建議:優秀JS開源人臉偵測辨識項目 建議:優秀JS開源人臉偵測辨識項目 Apr 03, 2024 am 11:55 AM

建議:優秀JS開源人臉偵測辨識項目

PHP與JS開發技巧:掌握繪製股票蠟燭圖的方法 PHP與JS開發技巧:掌握繪製股票蠟燭圖的方法 Dec 18, 2023 pm 03:39 PM

PHP與JS開發技巧:掌握繪製股票蠟燭圖的方法

如何使用PHP和JS創建股票蠟燭圖 如何使用PHP和JS創建股票蠟燭圖 Dec 17, 2023 am 08:08 AM

如何使用PHP和JS創建股票蠟燭圖

如何使用JS和百度地圖實現地圖多邊形繪製功能 如何使用JS和百度地圖實現地圖多邊形繪製功能 Nov 21, 2023 am 10:53 AM

如何使用JS和百度地圖實現地圖多邊形繪製功能

如何使用JS和百度地圖實現地圖熱力圖功能 如何使用JS和百度地圖實現地圖熱力圖功能 Nov 21, 2023 am 09:33 AM

如何使用JS和百度地圖實現地圖熱力圖功能

如何使用JS和百度地圖實現地圖點擊事件處理功能 如何使用JS和百度地圖實現地圖點擊事件處理功能 Nov 21, 2023 am 11:11 AM

如何使用JS和百度地圖實現地圖點擊事件處理功能

See all articles