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

javascript運行機制之this詳細介紹

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

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

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

1. 純函數(shù)

復制代碼 代碼如下:

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


 
getName(); 

運行結果分析:純函數(shù)中的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調用構造函數(shù)

復制代碼 代碼如下:

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


new getObj(); 

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

4. 內部函數(shù)

復制代碼 代碼如下:

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();

運行結果分析:內部函數(shù)中的this仍然指向的是全局對象,即window。這里普遍被認為是JavaScript語言的設計錯誤,因為沒有人想讓內部函數(shù)中的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個參數(shù)不同:
[1] call( thisArg [,arg1,arg2,… ] );  // 第2個參數(shù)使用參數(shù)列表:arg1,arg2,... 
[2] apply(thisArg [,argArray] );     //第2個參數(shù)使用 參數(shù)數(shù)組:argArray
運行結果分析:使用call / apply  的函數(shù)里面的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按鈕對象把函數(shù)(方法)用在事件處理的時候。 
    document.getElementById("btn").attachEvent('onclick',btClick);  //IE使用,控制臺輸出: Window  //this指向的是全局對象--window對象 
 </script> 

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

相關文章

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

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

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

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

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

    js setTimeout opener的用法示例詳解

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

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

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

    初學JavaScript第一章

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

    JavaScript中的6種運算符總結

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

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

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

    關于JS 預解釋的相關理解

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

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

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

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

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

最新評論

栖霞市| 县级市| 水城县| 堆龙德庆县| 静海县| 白山市| 治多县| 汝州市| 德令哈市| 来凤县| 永定县| 平果县| 宁夏| 大余县| 阿拉善左旗| 胶州市| 左权县| 北安市| 右玉县| 班玛县| 新巴尔虎左旗| 东方市| 丹阳市| 扎鲁特旗| 化德县| 平谷区| 会昌县| 田阳县| 泾阳县| 鞍山市| 铜山县| 丽水市| 张家界市| 普格县| 靖西县| 登封市| 焦作市| 鄂伦春自治旗| 定边县| 丹凤县| 南宁市|