亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

JS中的this變量的使用介紹

2019-11-20 21:52:08
字體:
來源:轉載
供稿:網友
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屬性('thisis a property of window'),所以會彈出 'thisis a property of window'。

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

this.x 與apply()、call()

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

示例三:call()
復制代碼 代碼如下:

function changeStyle( type , value ){

this.style[ type ] = value;

}

var one = document.getElementByIdx( '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.getElementByIdx( '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.getElementByIdx( 'one' );

one.onclick = function(){

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

};

注意:js中的全局變量都會動態添加到Window 的實例 window,作為其屬性。

this是js的一個關鍵字,隨著函數使用場合不同,this的值會發生變化。但是總有一個原則,那就是this指的是調用函數的那個對象。

1、純粹函數調用。
復制代碼 代碼如下:

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

其實這里的this就是全局變量??聪旅娴睦泳湍芎芎玫睦斫馄鋵峵his就是全局對象Global。
復制代碼 代碼如下:

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

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

2、作為方法調用,那么this就是指這個上級對象。
復制代碼 代碼如下:

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

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

3、作為構造函數調用。所謂構造函數,就是生成一個新的對象。這時,這個this就是指這個對象。
復制代碼 代碼如下:

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

4、apply調用

this指向的是apply中的第一個參數。
復制代碼 代碼如下:

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

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

當apply沒有參數時,表示為全局對象。所以值為0。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久久在线免费观看| 欧美日韩久久久久| 亚洲第一网中文字幕| 亚洲天堂影视av| 精品国产乱码久久久久酒店| 亚洲精品网站在线播放gif| 国产成人中文字幕| 日韩av一区二区在线| 亚洲精品视频二区| 美日韩精品视频免费看| 久久久精品网站| 日韩欧美在线视频观看| 亚洲美女av在线| 欧美午夜影院在线视频| 日韩电视剧免费观看网站| 97高清免费视频| 欧美精品在线免费播放| 欧美极品第一页| 日韩欧美中文字幕在线观看| 法国裸体一区二区| 日韩中文字幕免费视频| 国产a∨精品一区二区三区不卡| 亚洲欧美精品一区二区| 最近2019中文字幕大全第二页| 久久精彩免费视频| 亚洲人成欧美中文字幕| 亚洲色图五月天| 国产精品久久久久免费a∨大胸| 亚洲国产精品久久| 欧美又大粗又爽又黄大片视频| 97avcom| 欧美成人一区在线| 青青草原一区二区| 国产精品日韩电影| 97视频在线观看免费高清完整版在线观看| 精品欧美aⅴ在线网站| 亚洲免费影视第一页| 亚洲色图色老头| 欧美激情精品久久久久久久变态| 在线视频日本亚洲性| 亚洲最新中文字幕| 久久久久久12| 日韩av在线影视| 亚洲精品资源美女情侣酒店| 国产日韩在线看片| 97视频网站入口| 国产精品444| 国产精品揄拍500视频| 尤物yw午夜国产精品视频明星| 色综合伊人色综合网站| 欧美精品xxx| 欧美在线一区二区视频| 成人免费看黄网站| 欧美精品第一页在线播放| 亚洲综合自拍一区| 成人中文字幕在线观看| 亚洲国产精品va在线看黑人动漫| 中日韩美女免费视频网站在线观看| 亚洲影院污污.| 久久综合网hezyo| 日韩高清不卡av| 精品久久香蕉国产线看观看gif| 欧美亚洲视频在线观看| 国产精品日韩欧美大师| 久久国内精品一国内精品| 亚洲xxxxx电影| 一区二区三区视频在线| 欧美成人午夜剧场免费观看| 黑人极品videos精品欧美裸| 国产不卡视频在线| 欧美中文在线字幕| 久久久久久久久久久成人| 久久人人爽人人爽人人片av高清| 亚洲第一视频网| 国产成人一区二| 国产精品网站入口| 国产精品中文字幕久久久| 欧美亚洲视频一区二区| 欧美精品在线免费| 91精品国产高清久久久久久久久| 亚洲国产精品va在线观看黑人| 成人有码在线播放| 国产日韩精品入口| 国产在线观看91精品一区| 久久久中精品2020中文| 一区二区三区无码高清视频| 欧美性生交大片免费| 成人网址在线观看| 精品久久久久久久久中文字幕| 日韩在线视频网站| 精品国偷自产在线视频99| 中文亚洲视频在线| 一本色道久久88亚洲综合88| 国产日本欧美视频| 欧美一区二区三区四区在线| 国产一区二区三区四区福利| 国产精品久久久久久中文字| 亚洲视频一区二区三区| 精品国产精品三级精品av网址| 亚洲国产精品久久久久久| 欧美日韩中文字幕在线| 国产不卡一区二区在线播放| 欧美xxxx做受欧美.88| 欧美极品少妇xxxxⅹ裸体艺术| 一区二区三区国产在线观看| 亚洲精品之草原avav久久| 一区二区三区www| 日本高清视频一区| 日韩在线观看免费全| 日韩亚洲精品电影| 欧美亚洲一区在线| 国产成人在线视频| 亚洲精品网站在线播放gif| 一区三区二区视频| 亚洲第一中文字幕在线观看| 色哟哟亚洲精品一区二区| 日韩欧美一区二区三区| 成人午夜激情免费视频| 日韩一区二区精品视频| 亚洲欧洲日产国码av系列天堂| 国产精品极品尤物在线观看| 69av在线视频| 日韩中文在线不卡| 在线观看日韩专区| 日本国产精品视频| 美女视频久久黄| 久久天堂电影网| 欧美激情视频一区二区| 久久久久久久国产精品视频| 亚洲最大中文字幕| 亚洲精品mp4| 精品久久久久久久久中文字幕| 亚洲性视频网站| 热久久这里只有精品| 久久视频在线观看免费| 91视频国产精品| 在线播放精品一区二区三区| 热re99久久精品国产66热| 九九热99久久久国产盗摄| 9.1国产丝袜在线观看| 日韩精品在线电影| 国产精品国产亚洲伊人久久| 成人444kkkk在线观看| 欧美黑人一级爽快片淫片高清| 亚洲大胆人体av| 国产欧美一区二区三区久久| 日韩在线视频一区| 中文字幕不卡av| 另类少妇人与禽zozz0性伦| 欧美日韩免费在线观看| 91极品女神在线| www.欧美免费| 色黄久久久久久| 亚洲国产黄色片| 国模精品系列视频| 日韩av在线不卡| 国产精品日日摸夜夜添夜夜av| 亚洲石原莉奈一区二区在线观看| 俺去亚洲欧洲欧美日韩| 中文字幕av一区二区| 亚洲国产成人精品电影| 日韩成人在线网站| 亚洲第一区中文99精品| 久久精品国产69国产精品亚洲|