日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

深入理解JavaScript中的this关键字

發布時間:2025/3/8 javascript 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 深入理解JavaScript中的this关键字 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在JavaScript中this變量是一個令人難以摸清的關鍵字,this可謂是非常強大,充分了解this的相關知識有助于我們在編寫面向對象的JavaScript程序時能夠游刃有余。

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

示例一、

?

var obj = {};
obj.x
= 100;
obj.y
= function(){ alert( this.x ); };
obj.y();
//彈出 100

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

示例二、

?

代碼 var checkThis = function(){
alert(
this.x);
};
var x = 'this is a property of window';

var 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屬性( 'this is a property of window'),所以會彈出 'this is a property of window'。

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

?

this.x 與 apply()、call()

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

示例三:call()

代碼 function changeStyle( type , value ){
this.style[ type ] = value;
}

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

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()

代碼 function changeStyle( type , value ){

this.style[ type ] = value;

}

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

changeStyle.apply( one , [
'fontSize' , '100px' ]);

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

apply的用法和call大致相同,只有一點區別,apply只接受兩個參數,第一個參數和call相同,第二個參數必須是一個數組,數組中的元素對應的就是函數的形參。

?

無意義(詭異)的this用處

示例五:

代碼 var obj = {
x :
100,
y :
function(){
setTimeout(
function(){ alert(this.x); } //這里的this指向的是window對象,并不是我們期待的obj,所以會彈出undefined
, 2000);
}
};

obj.y();

如何達到預期的效果

var obj = {
x :
100,
y :
function(){
var that = this;
setTimeout(
function(){ alert(that.x); }
,
2000);
}
};

obj.y();
//彈出100

事件監聽函數中的this

var one = document.getElementById( 'one' );
one.onclick
= function(){
alert(
this.innerHTML ); //this指向的是one元素,這點十分簡單..
};

?

轉載于:https://www.cnblogs.com/jenry/archive/2010/12/08/1900572.html

總結

以上是生活随笔為你收集整理的深入理解JavaScript中的this关键字的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。