this的含義:代表的是執行當前代碼的對象。
先從我最開始認識this說起:
<input id='btn' type='submit' value='確認' />
JS代碼:
var btn = document.getElementById('btn');
btn.οnclick=function(){
alert(this.value);
}
運行,顯示爲:確認
老師在講面向對象時講到this,直接把我繞暈了,我查了查資料並實驗了下,總結如下:
this指向的是一個 對象
1.純粹的函數,非對象的方法:默認爲指向window
var x=1;
function a(){
alert(this.x);
}
a();
在這裏,我們定義了一個全局變量x並賦值爲1,在純函數中 alert 出來this,結果顯示爲: 1
默認情況下,this指向的是window,是全局Global,我們在執行函數a時,實際上是window.a();所以this現在指向的是全局
而我們在全局中定義了一個x,所以alert(this.x)結果是x的值。
爲了證明,我們修改一下代碼:
function a(){
this.x = 2;
}
a();
alert(x);
結果顯示爲2,說明我們執行函數a時,使用this定義了一個全局變量x,並賦值爲2;
在這裏列出一個特殊情況,在標籤內部調用函數
<input id='btn' type='submit'οnclick='dosomething()' value='確認' />
在這裏,這個標籤點擊時調用的函數,其this指向仍然爲window全局
而:<input id='btn' type='submit'οnclick='dosomething(this)' value='確認' />
這裏,因爲調用函數時將this傳入調用函數中,這個this指向的該標籤
2.對象內的函數(對象內的方法),指向調用該函數的對象
var objA = new Object();//新建一個對象a
objA.someValue = 1;
objA.fnTest = function(){
alert('valueA:'+this.someValue);
}
var objB = new Object();//新建一個對象b
objB.someValue = 2;
objB.fnTest = function(){
alert('valueB:'+this.someValue);
}
objA.fnTest();
objB.fnTest();
分別顯示valueA:1 valueB:2
3.在構造函數內調用,this指向新創建的的對象
function test(){
this.x = 1;
}
var o = new test();
alert(o.x);
顯示:1。
4.使用其他方法綁定this指向
發
生