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

javascript運行機制之this詳細(xì)介紹

 更新時間:2014年02月07日 14:43:28   作者:  
這篇文章主要介紹了javascript運行機制之this,需要的朋友可以參考下

this是面向?qū)ο笳Z言中一個重要的關(guān)鍵字,理解并掌握該關(guān)鍵字的使用對于我們代碼的健壯性及優(yōu)美性至關(guān)重要。而javascript的this又有區(qū)別于Java、C#等純面向?qū)ο蟮恼Z言,這使得this更加撲朔迷離,讓人迷惑。

this使用到的情況:
1. 純函數(shù)
2. 對象方法調(diào)用
3. 使用new調(diào)用構(gòu)造函數(shù)
4. 內(nèi)部函數(shù)
5. 使用call / apply
6.事件綁定

1. 純函數(shù)

復(fù)制代碼 代碼如下:

var name = 'this is window';  //定義window的name屬性 
function getName(){ 
       console.log(this);    //控制臺輸出: Window  //this指向的是全局對象--window對象 
       console.log(this.name);  //控制臺輸出: this is window  / 


 
getName(); 

運行結(jié)果分析:純函數(shù)中的this均指向了全局對象,即window。

2. 對象方法調(diào)用

復(fù)制代碼 代碼如下:

var name = 'this is window';  //定義window的name屬性,看this.name是否會調(diào)用到 
var testObj = { 
    name:'this is testObj', 
    getName:function(){ 
        console.log(this);  //控制臺輸出:testObj   //this指向的是testObj對象 
        console.log(this.name);  //控制臺輸出: this is testObj 
    } 


testObj.getName(); 

運行結(jié)果分析:被調(diào)用方法中this均指向了調(diào)用該方法的對象。

3.  使用new調(diào)用構(gòu)造函數(shù)

復(fù)制代碼 代碼如下:

function getObj(){ 
    console.log(this);    //控制臺輸出: getObj{}  //this指向的新創(chuàng)建的getObj對象 


new getObj(); 

運行結(jié)果分析:new 構(gòu)造函數(shù)中的this指向新生成的對象。

4. 內(nèi)部函數(shù)

復(fù)制代碼 代碼如下:

var name = "this is window";  //定義window的name屬性,看this.name是否會調(diào)用到 
var testObj = { 
    name : "this is testObj", 
    getName:function(){ 
        //var self = this;   //臨時保存this對象 
        var handle = function(){ 
            console.log(this);   //控制臺輸出: Window  //this指向的是全局對象--window對象 
            console.log(this.name);  //控制臺輸出: this is window   
            //console.log(self);  //這樣可以獲取到的this即指向testObj對象 
        } 
        handle(); 
    } 


testObj.getName();

運行結(jié)果分析:內(nèi)部函數(shù)中的this仍然指向的是全局對象,即window。這里普遍被認(rèn)為是JavaScript語言的設(shè)計錯誤,因為沒有人想讓內(nèi)部函數(shù)中的this指向全局對象。一般的處理方式是將this作為變量保存下來,一般約定為that或者self,如上述代碼所示。

5. 使用call / apply

復(fù)制代碼 代碼如下:

var name = 'this is window';  //定義window的name屬性,看this.name是否會調(diào)用到 
var testObj1 = { 
    name : 'this is testObj1', 
    getName:function(){ 
        console.log(this);   //控制臺輸出: testObj2  //this指向的是testObj2對象 
        console.log(this.name);  //控制臺輸出: this is testObj2   
    } 


var testObj2 = { 
    name: 'this is testObj2' 


testObj1.getName.apply(testObj2); 
testObj1.getName.call(testObj2); 

Note:apply和call類似,只是兩者的第2個參數(shù)不同:
[1] call( thisArg [,arg1,arg2,… ] );  // 第2個參數(shù)使用參數(shù)列表:arg1,arg2,... 
[2] apply(thisArg [,argArray] );     //第2個參數(shù)使用 參數(shù)數(shù)組:argArray
運行結(jié)果分析:使用call / apply  的函數(shù)里面的this指向綁定的對象。

6. 事件綁定
事件方法中的this應(yīng)該是最容易讓人產(chǎn)生疑惑的地方,大部分的出錯都源于此。

復(fù)制代碼 代碼如下:

//頁面Element上進(jìn)行綁定 
  <script type="text/javascript"> 
     function btClick(){ 
        console.log(this);  //控制臺輸出: Window  //this指向的是全局對象--window對象 
    } 
  </script> 
  <body> 
    <button id="btn" onclick="btClick();" >點擊</button> 
  </body> 

復(fù)制代碼 代碼如下:

//js中綁定方式(1) 
  <body> 
    <button id="btn">點擊</button> 
  </body> 
  <script type="text/javascript"> 
     function btClick(){ 
        console.log(this);  //控制臺輸出:<button id="btn">點擊</button>  //this指向的是Element按鈕對象 
     } 

     document.getElementById("btn").onclick = btClick; 
     document.getElementById("btn").onclick;   
  </script> 

復(fù)制代碼 代碼如下:

//js中綁定方式(2) 
<body> 
   <button id="btn">點擊</button> 
 </body> 
 <script type="text/javascript"> 
    document.getElementById("btn").onclick = function(){ 
     console.log(this);  //控制臺輸出:<button id="btn">點擊</button>  //this指向的是Element按鈕對象 
    } 
    document.getElementById("btn").onclick; 
 </script> 

復(fù)制代碼 代碼如下:

//js中綁定方式(3) 
<body> 
   <button id="btn">點擊</button> 
 </body> 
 <script type="text/javascript"> 
    function btClick(){ 
        console.log(this);   
     } 

    document.getElementById("btn").addEventListener('click',btClick); //控制臺輸出:<button id="btn">點擊</button>  //this指向的是Element按鈕對象把函數(shù)(方法)用在事件處理的時候。 
    document.getElementById("btn").attachEvent('onclick',btClick);  //IE使用,控制臺輸出: Window  //this指向的是全局對象--window對象 
 </script> 

運行結(jié)果分析:以上2種常用事件綁定方法,在頁面Element上的進(jìn)行事件綁定(onclick="btClick();"),this指向的是全局對象;而在js中進(jìn)行綁定,除了attachEvent綁定的事件方法外,this指向的是綁定事件的Elment元素。

相關(guān)文章

  • 實例區(qū)別onClick和onDBClick兩事件方法

    實例區(qū)別onClick和onDBClick兩事件方法

    實例區(qū)別onClick和onDBClick兩事件方法
    2008-09-09
  • 基于JavaScript 下namespace 功能的簡單分析

    基于JavaScript 下namespace 功能的簡單分析

    前些天在剝離 百度隨心聽 的播放器引擎時,看到了一個namespace方法,覺得新奇,當(dāng)然只是對于我自己而言,我入門js不久,經(jīng)驗尚淺
    2013-07-07
  • js setTimeout opener的用法示例詳解

    js setTimeout opener的用法示例詳解

    opener: 指parent表示父窗口,比如一個A頁面利用iframe或frame調(diào)用B頁面,那么A頁面所在窗口就是B頁面的parent,下面為大家介紹下其詳細(xì)的使用方法,感興趣的朋友可以參考下
    2013-10-10
  • Javascript模塊化編程(一)AMD規(guī)范(規(guī)范使用模塊)

    Javascript模塊化編程(一)AMD規(guī)范(規(guī)范使用模塊)

    這個系列的第一部分介紹了Javascript模塊的基本寫法,今天介紹如何規(guī)范地使用模塊,先想一想,為什么模塊很重要?接下來為您詳細(xì)介紹,感興趣的朋友可以了解下啊
    2013-01-01
  • 初學(xué)JavaScript第一章

    初學(xué)JavaScript第一章

    下面為自己初學(xué)JavaScript時覺得應(yīng)該注意的地方(從<<JavaScript動態(tài)網(wǎng)頁開發(fā)詳解>>中學(xué)到)
    2008-09-09
  • JavaScript中的6種運算符總結(jié)

    JavaScript中的6種運算符總結(jié)

    這篇文章主要介紹了JavaScript中的6種運算符總結(jié),本文總結(jié)了算術(shù)運算符、賦值運算符、比較運算符、三元運算符、邏輯運算符、字符串連接運算符等,需要的朋友可以參考下
    2014-10-10
  • JS同步、異步、延遲加載的方法

    JS同步、異步、延遲加載的方法

    本篇文章講述了JS同步、異步、延遲加載的方法,具有很好的參考價值,希望對大家的學(xué)習(xí)有所幫助
    2018-05-05
  • 關(guān)于JS 預(yù)解釋的相關(guān)理解

    關(guān)于JS 預(yù)解釋的相關(guān)理解

    下面小編就為大家?guī)硪黄P(guān)于JS 預(yù)解釋的相關(guān)理解。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-06-06
  • 實例講解JavaScript中instanceof運算符的用法

    實例講解JavaScript中instanceof運算符的用法

    JavaScript中的instanceof運算符可以用來判斷對象類型,而更重要的是instanceof能夠判斷對象的繼承關(guān)系,這里我們就來以實例講解JavaScript中instanceof運算符的用法
    2016-06-06
  • 簡介JavaScript中valueOf()方法的使用

    簡介JavaScript中valueOf()方法的使用

    這篇文章主要介紹了簡介JavaScript中valueOf()方法的使用,是JS入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-06-06

最新評論

通化市| 武川县| 红原县| 肇东市| 偏关县| 邯郸市| 盘锦市| 绥棱县| 建水县| 祥云县| 洛隆县| 澄迈县| 屏南县| 临猗县| 蛟河市| 紫云| 盐津县| 惠来县| 招远市| 报价| 盱眙县| 永平县| 襄汾县| 湟中县| 德安县| 呈贡县| 玛多县| 巢湖市| 南川市| 琼结县| 静海县| 松潘县| 板桥市| 洪洞县| 日土县| 环江| 葫芦岛市| 东城区| 青浦区| 阜城县| 鞍山市|