亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

javascript運行機制之this詳細介紹

2019-11-20 21:09:27
字體:
來源:轉載
供稿:網友

this是面向對象語言中一個重要的關鍵字,理解并掌握該關鍵字的使用對于我們代碼的健壯性及優美性至關重要。而javascript的this又有區別于Java、C#等純面向對象的語言,這使得this更加撲朔迷離,讓人迷惑。

this使用到的情況:
1. 純函數
2. 對象方法調用
3. 使用new調用構造函數
4. 內部函數
5. 使用call / apply
6.事件綁定

1. 純函數

復制代碼 代碼如下:

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


 
getName(); 

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

2. 對象方法調用

復制代碼 代碼如下:

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


testObj.getName(); 

運行結果分析:被調用方法中this均指向了調用該方法的對象。

3.  使用new調用構造函數

復制代碼 代碼如下:

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


new getObj(); 

運行結果分析:new 構造函數中的this指向新生成的對象。

4. 內部函數

復制代碼 代碼如下:

var name = "this is window";  //定義window的name屬性,看this.name是否會調用到 
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();

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

5. 使用call / apply

復制代碼 代碼如下:

var name = 'this is window';  //定義window的name屬性,看this.name是否會調用到 
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個參數不同:
[1] call( thisArg [,arg1,arg2,… ] );  // 第2個參數使用參數列表:arg1,arg2,... 
[2] apply(thisArg [,argArray] );     //第2個參數使用 參數數組:argArray
運行結果分析:使用call / apply  的函數里面的this指向綁定的對象。

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

復制代碼 代碼如下:

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

復制代碼 代碼如下:

//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> 

復制代碼 代碼如下:

//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> 

復制代碼 代碼如下:

//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按鈕對象把函數(方法)用在事件處理的時候。 
    document.getElementById("btn").attachEvent('onclick',btClick);  //IE使用,控制臺輸出: Window  //this指向的是全局對象--window對象 
 </script> 

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美xxxx做受欧美.88| 国产91精品网站| 日韩成人激情视频| 欧美黑人xxxⅹ高潮交| 亚洲国产精品va| 亚洲欧美综合v| 久久99久国产精品黄毛片入口| 久久久999精品视频| 国产综合在线看| 欧美一区第一页| 国内精品久久久久久影视8| 久久久久九九九九| 国产成人精品在线| 色偷偷av一区二区三区| 91亚洲精品视频| 77777亚洲午夜久久多人| 久久亚洲成人精品| 中文字幕久热精品视频在线| 国产伊人精品在线| 亚洲精品永久免费| 亚洲影视中文字幕| 国产成人福利夜色影视| 97福利一区二区| 欧美风情在线观看| 日韩午夜在线视频| 欧美色另类天堂2015| 国产精品最新在线观看| 91精品视频在线免费观看| 国产精品影院在线观看| 国语自产精品视频在线看一大j8| 欧美高清电影在线看| 欧美性受xxx| 久久亚洲精品视频| 国产精品久在线观看| 日韩网站在线观看| 国产亚洲aⅴaaaaaa毛片| 精品电影在线观看| 久久久久国产精品一区| 欧美性高跟鞋xxxxhd| 国产成人亚洲综合91精品| 在线观看中文字幕亚洲| 欧美成人亚洲成人| 国产成人拍精品视频午夜网站| 欧美亚洲日本黄色| 亚洲最大中文字幕| 国产精品久久久久久久9999| 日本成人在线视频网址| 欧美激情精品久久久久久大尺度| 亚洲国产精品嫩草影院久久| 欧美日韩高清区| 国产一区二区三区视频免费| 一区二区三欧美| 欧美日韩在线视频一区二区| 精品毛片网大全| 97在线视频免费看| 成人h视频在线| 国产一区红桃视频| 亚洲国产高清高潮精品美女| 美女扒开尿口让男人操亚洲视频网站| 亚洲性线免费观看视频成熟| 国产免费成人av| 羞羞色国产精品| 亚洲久久久久久久久久| 久久天天躁狠狠躁老女人| 97视频在线观看成人| 国产欧美va欧美va香蕉在| 午夜精品久久久久久久白皮肤| 久久久久久久久久久网站| 成人黄色在线免费| 欧美又大又粗又长| 国产精欧美一区二区三区| 91成人福利在线| 亚洲三级免费看| 亚洲一区二区三区毛片| 亚洲аv电影天堂网| 亚洲人成电影网| 欧美日产国产成人免费图片| 91在线高清免费观看| 国产成人综合精品在线| 奇米四色中文综合久久| 国产精品永久免费视频| 中文字幕在线成人| 中文日韩电影网站| 欧美综合一区第一页| 亚洲欧美中文字幕在线一区| 亚洲国产精彩中文乱码av在线播放| 91九色蝌蚪国产| 蜜月aⅴ免费一区二区三区| 国产亚洲精品综合一区91| 亚洲国语精品自产拍在线观看| 亚洲电影成人av99爱色| 亚洲精品狠狠操| 黑人巨大精品欧美一区二区| 热久久这里只有精品| 国产精品91久久久| 国产午夜精品全部视频在线播放| 精品日本美女福利在线观看| 欧美大片在线影院| 欧美日韩成人在线播放| 亚洲精品日韩激情在线电影| 欧美午夜www高清视频| 日韩在线观看免费高清完整版| 韩国v欧美v日本v亚洲| 国产精品黄色影片导航在线观看| 色综合91久久精品中文字幕| 美乳少妇欧美精品| 欧美亚洲视频在线看网址| 亚洲视频在线播放| 欧美又大又硬又粗bbbbb| 国产suv精品一区二区三区88区| 亚洲国产日韩欧美在线动漫| 欧美午夜精品久久久久久人妖| 日韩精品在线视频| 91色中文字幕| 日韩精品高清视频| 另类色图亚洲色图| 538国产精品一区二区在线| 欧美激情视频在线| 国产成人精彩在线视频九色| 黑人精品xxx一区| 欧美乱大交做爰xxxⅹ性3| 国产在线观看一区二区三区| 91精品国产自产91精品| 一区二区在线视频| 国产一区二区三区丝袜| 日韩在线观看免费网站| 性欧美办公室18xxxxhd| 欧美黑人狂野猛交老妇| 国产精品成久久久久三级| 最近2019免费中文字幕视频三| 国产日韩欧美中文在线播放| 成人激情在线播放| 欧美电影免费播放| 日韩视频免费中文字幕| 91精品国产成人www| 欧美亚洲伦理www| 亚洲精品91美女久久久久久久| 精品久久久一区| 亚洲最新av在线网站| 97视频在线观看免费高清完整版在线观看| 久久久久久久久久久免费精品| 国产精品www网站| 国产成一区二区| 亚洲最大福利视频网| 成人精品视频在线| 欧美高清第一页| 这里只有精品视频| 国产亚洲精品久久| 亚洲黄色成人网| 国产91久久婷婷一区二区| 日韩人体视频一二区| 亚洲成人精品视频在线观看| 亚洲国产精品免费| www.日韩不卡电影av| 国产精品久久久久久超碰| 欧美激情免费视频| 深夜精品寂寞黄网站在线观看| 精品无人区乱码1区2区3区在线| 久99九色视频在线观看| 日韩免费高清在线观看| 国产精品久久久久久久午夜| 久久久免费精品| 九九热精品视频| 欧美精品久久久久久久免费观看|