深入認識JavaScript中的this指針

this是JavaScript中功能最強大的關鍵字之一。不幸的是,如果你不知道它具體怎麼工作,你將很難正確使用它。


this是面嚮對象語言中的一個重要概念,在JAVA,C#等大型語言中,this固定指向運行時的當前對象。但是在javascript中,由於 javascript的動態性(解釋執行,當然也有簡單的預編譯過程),this的指向在運行時才確定。這個特性在給我們帶來迷惑的同時也帶來了編程上的 自由和靈活,結合apply(call)方法,可以使JS變得異常強大。
2.變化的this
在JavaScript中,this通常指向的是我們正在執行的函數本身,或者是指向該函數所屬的對象(運行時)。當我們在頁面中定義了函數 doSomething()的時候,它的owner是頁面,或者是JavaScript中的window對象(或 global對象)。對於一個onclick屬性,它爲它所屬的HTML元素所擁有,this應該指向該HTML元素。
2.1在幾種常見場景中this的變化
函數示例
function doSomething ()
{
alert(this.navigator); //appCodeName
this.value = "I am from the Object constructor";
this.style.backgroundColor = "# 000000";
}
1. (A)作爲普通函數直接調用時,this指向window對象.
2. (B)作爲控件事件觸發時
1) inline event registration 內聯事件註冊 .將事件直接寫在HTML代碼中(<element
onclick=”doSomething()”>), 此時this指向 window對象 。
2) Traditional event registration 傳統事件註冊 (DHTML方式).
形如 element.onclick = doSomething; 此時this指向 element對象
3) <element onclick=”doSomething(this)”>作爲參數傳遞可以指向element
3. (C)作爲對象使用時this指向當前對象。形如:new doSomething();
4. (D)使用apply 或者call方法時,this指向所傳遞的對象。
形如:var obj={}; doSomething.apply(obj,new Array(”nothing”); //thisàobj

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章