JS中的this變數的使用介紹_基礎知識
js
this
JavaScript中this的使用
在JavaScript中this變數是一個令人難以摸清的關鍵字,this可謂是非常強大,充分了解this的相關知識有助於我們在編寫物件導向的JavaScript程序時能夠游刃有餘。
對於this變數最要的是能夠釐清this所引用的物件到底是哪一個,也許很多資料上都有自己的解釋,但有些概念講的偏繁雜。而我的理解是:首先分析this所在的函數是當做哪個物件的方法呼叫的,則該物件就是this所引用的物件。
範例一、
複製程式碼 程式碼如下:
程式碼如下:
obj.x = 100;
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'); //出現錯誤,原因同例三
如何達到預期的效果
複製程式碼 程式碼如下:
var🎜> 程式碼如下:
var obj = {
x : 100,
y : function(){
var that = this;
setTimeout(
, 2000);
}
};
obj.y(); //1000
程式碼如下:
var one = document.getElementByIdx( 'one' );
one.onclick = function(){
alert( this.innerHTML ); //this指向的是one元素元素,這點十分簡單..
注意:js中的全域變數都會動態加入Window 的實例window,作為其屬性。
this是js的一個關鍵字,隨著函數使用場合不同,this的值會改變。但是總有一個原則,那就是this指的是呼叫函數的那個物件。
程式碼如下:
function test() {
this
this. = 1;
alert(x);
} function test() {
this
this. = 1;
alert(x);
test();
程式碼如下:
var x = 1;
function test(test()) {
alert(this.x);
}
test();//1
var x = 1;
function test() {
this.x = 0;
}
alert(x);//0
程式碼如下:
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中的第一個參數。
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
人工智慧驅動的應用程序,用於創建逼真的裸體照片

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章
R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前
By 尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
4 週前
By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前
By 尊渡假赌尊渡假赌尊渡假赌
擊敗分裂小說需要多長時間?
3 週前
By DDD
R.E.P.O.保存文件位置:在哪里以及如何保護它?
3 週前
By DDD

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

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