監(jiān)理公司管理系統(tǒng) | 工程企業(yè)管理系統(tǒng) | OA系統(tǒng) | ERP系統(tǒng) | 造價咨詢管理系統(tǒng) | 工程設計管理系統(tǒng) | 甲方項目管理系統(tǒng) | 簽約案例 | 客戶案例 | 在線試用
X 關(guān)閉

JS中的this關(guān)鍵字解剖

申請免費試用、咨詢電話:400-8352-114

  在開發(fā)的各類語言中都會有 this 關(guān)鍵字,this 看起來很簡單,但是在不同的地方代表的意義就不一樣了,很

  容易混淆。做過Java的同道中人都會遇到一個這樣的問題,在一個類中的this,在類的方法中代表的是該類的實例對

  象,但是遇到匿名內(nèi)部類就麻煩了,此時的this代表的是所屬類的實例對象。在JavaScript中this變量是一個令人難

  以摸清的關(guān)鍵字,this可謂是非常強大,充分了解this的相關(guān)知識有助于我們在編寫面向?qū)ο蟮腏avaScript程序時能

  夠游刃有余,那就更難理解了,因為我個人感覺JS比Java語言要難,JS 是一種弱的腳本語言,在一個function的作

  用范圍就不一樣了,下面就我對JS腳本語言中的this關(guān)鍵字的理解,闡述一下自己的理解看法:

  1、一般用處:

  對于this變量最要的是能夠理清this所引用的對象到底是哪一個,也許很多資料上都有自己的解釋,但有些概

  念講的偏繁雜。而我的理解是:首先分析this所在的函數(shù)是當做哪個對象的方法調(diào)用的,則該對象就是this所引用的

  對象。

  eg1:

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

  解析:這段代碼非常容易理解,當執(zhí)行 obj.y() 時,函數(shù)是作為對象obj的方法調(diào)用的,因此函數(shù)體內(nèi)的this

  指向的是obj對象,所以會彈出100。

  eg2:

  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 ); }; var obj2 = obj.y; obj.y(); //彈出 100 checkThis(); //彈出 'this is a property of window obj2(); //彈出 'this is a property of window

  解析:這里為什么會彈出 'this is a property of window',可能有些讓人迷惑。在JavaScript的變量作用域

  里有一條規(guī)則“全局變量都是window對象的屬性”。當執(zhí)行 checkThis() 時相當于 window.checkThis(),因此,此

  時checkThis函數(shù)體內(nèi)的this關(guān)鍵字的指向變成了window對象,而又因為window對象又一個x屬性( 'this is a

  property of window'),所以會彈出 'this is a property of window'。

  上面的兩個示例都是比較容易理解的,因為只要判斷出當前函數(shù)是作為哪個對象的方法調(diào)用(被哪個對象調(diào)用)

  的,就可以很容易的判斷出當前this變量的指向。

  2、this.x 與 apply()、call()

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

  eg3:---> call()

  function changeStyle( type , value ){ this.style[ type ] = value; } var one = document.getElementById( 'one' ); changeStyle.call( one , 'fontSize' , '100px' ); changeStyle('fontSize' , '300px'); //出現(xiàn)錯誤,因為此時changeStyle中this引用的是window對象,而window并無style屬性。

  解析:注意changeStyle.call() 中有三個參數(shù),第一個參數(shù)用于指定該函數(shù)將被哪個對象所調(diào)用。這里指定了

  one,也就意味著,changeStyle函數(shù)將被one調(diào)用,因此函數(shù)體內(nèi)this指向是one對象。而第二個和第三個參數(shù)對

  應的是changeStyle函數(shù)里的type和value兩個形參。最總我們看到的效果是Dom元素one的字體變成了20px。

  eg4:---> apply()

  function changeStyle( type , value ){ this.style[ type ] = value; } var one = document.getElementById( 'one' ); changeStyle.apply( one , ['fontSize' , '100px' ]); changeStyle('fontSize' , '300px'); //出現(xiàn)錯誤,原因同示例三

  解析:apply的用法和call大致相同,只有一點區(qū)別,apply只接受兩個參數(shù),第一個參數(shù)和call相同,第二個參

  數(shù)必須是一個數(shù)組,數(shù)組中的元素對應的就是函數(shù)的形參。

  3、無意義(詭異)的this用處

  eg5:

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

  如何達到預期的效果?

  eg6:

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

  4、事件監(jiān)聽函數(shù)中的this

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

};

  總結(jié):

  綜上所述,在JS中語言中,關(guān)鍵字 this在不同的地方,代表的作用意義就不一樣,

  this --->所指的就是直至包含this指針的上層對象;

  調(diào)用形式this指向 普通函數(shù) 全局對象window 對象的方法 該對象 構(gòu)造函數(shù) 新構(gòu)造的對象

發(fā)布:2007-04-07 16:32    編輯:泛普軟件 · xiaona    [打印此頁]    [關(guān)閉]
相關(guān)文章:

泛普微信營銷軟件其他應用

微營銷 微信推廣 微信營銷軟件 微信二維碼 微信商城 微信支付 微信開店 微信公眾平臺 微信公眾號 微信公眾平臺登錄 微信怎么玩 微信認證 下載微信到手機 手機微信 微信官網(wǎng) 微信網(wǎng)頁版 電腦微信 微信電腦版 微信公眾平臺注冊 微信注冊 微信公眾號申請