最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JS中的this變量的使用介紹

 更新時間:2013年10月21日 16:27:49   作者:  
在JavaScript中this變量是一個令人難以摸清的關鍵字,this可謂是非常強大,在本文將為大家詳細介紹下JavaScript中this的使用,感興趣的朋友可以參考下
JavaScript中this的使用

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

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

示例一、
復制代碼 代碼如下:

var obj = {};

obj.x = 100;

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

obj.y(); //彈出 100

這段代碼非常容易理解,當執(zhí)行 obj.y() 時,函數(shù)是作為對象obj的方法調用的,因此函數(shù)體內的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的變量作用域里有一條規(guī)則“全局變量都是window對象的屬性”。當執(zhí)行checkThis() 時相當于window.checkThis(),因此,此時checkThis函數(shù)體內的this關鍵字的指向變成了window對象,而又因為window對象又一個x屬性('thisis a property of window'),所以會彈出 'thisis a property of window'。

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

this.x 與apply()、call()

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

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

function changeStyle( type , value ){

this.style[ type ] = value;

}

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

changeStyle.call( one , 'fontSize' , '100px' );

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

注意changeStyle.call()中有三個參數(shù),第一個參數(shù)用于指定該函數(shù)將被哪個對象所調用。這里指定了one,也就意味著,changeStyle函數(shù)將被one調用,因此函數(shù)體內this指向是one對象。而第二個和第三個參數(shù)對應的是changeStyle函數(shù)里的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'); //出現(xiàn)錯誤,原因同示例三

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

無意義(詭異)的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

事件監(jiān)聽函數(shù)中的this
復制代碼 代碼如下:

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

one.onclick = function(){

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

};

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

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

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

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

其實這里的this就是全局變量。看下面的例子就能很好的理解其實this就是全局對象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、作為構造函數(shù)調用。所謂構造函數(shù),就是生成一個新的對象。這時,這個this就是指這個對象。
復制代碼 代碼如下:

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

4、apply調用

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

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沒有參數(shù)時,表示為全局對象。所以值為0。

相關文章

最新評論

武功县| 仁寿县| 红桥区| 台东县| 吉林省| 嫩江县| 平南县| 东至县| 且末县| 兴文县| 四平市| 宜良县| 齐齐哈尔市| 瑞安市| 高尔夫| 巧家县| 石城县| 陵川县| 华坪县| 蓬莱市| 基隆市| 抚远县| 扶风县| 镇远县| 车险| 东源县| 贵港市| 榆社县| 丹江口市| 香港| 康保县| 土默特右旗| 鹰潭市| 汝城县| 惠水县| 洛川县| 论坛| 新民市| 焦作市| 张家界市| 公安县|