對於JavaScript中this關鍵字的理解

來源:互聯網
上載者:User

標籤:9.png   rip   分享   輸出   logs   作用   需要   this   存在   

  這是我第二遍學this了,第一遍學的懵懵的。this指哪裡都是憑我一個男人的直覺然後控制台輸出看看對不對。

  剛查了書、部落格、視頻。理解差不多了。畢竟菜雞me;

一、首先介紹下什麼是this

  this是一個標識符,它需要和值進行綁定,和變數差不多;但是在你的代碼中,它不是和某個具體的值進行綁定。而是綁定到正確的對象上,一般來說參數究竟綁定在哪個對象上都是由定位函數參數規則所決定的。

 

、this對象是在運行時基於函數的執行環境綁定的,當函數被作為某個對象的方法調用時,this等於那個對象。

代碼一 

1 var name = "全域";2 var obj = {3     name : "object",4     getNameFunc : function() {5         console.log(this.name);6     }  7 };8 obj.getNameFunc();

 

 

、相同的在全域函數是this就是window;但是匿名函數的執行環境的執行環境具有全域性所以代碼2就有的解釋啦

代碼二

 var name = "全域"; var obj = {     name : "object",     getNameFunc : function() {        return function(){            console.log(this.name);            };    }  }; obj.getNameFunc() ();

 

 

四、在JavaScript高程中作者說每個函數在調用時都會自動取得兩個變數:this和argutments。內建函式在搜尋這兩個變數時,只會搜尋到其使用中的物件為止。因此永遠不可能直接存取外部函數的這兩個變數。把外部範圍中的this對象儲存在一個閉包能訪問到的地方;如代碼三

代碼三

 1  var name = "全域"; 2  var obj = { 3      name : "object", 4      getNameFunc : function() { 5         var biubiu =this; 6         return function(){ 7             console.log(biubiu.name); 8             }; 9     }  10 };11  obj.getNameFunc() ();

五 ;總結

  關鍵詞this使得我們可以僅建立一個函數對象,就可以將其作為方法用在一些其他的對象上,每次我們調用該方法時它便可以調用他的對象。對於節省記憶體十分有用。

這都是因為this得以實現。(我也不大懂Twitter前培訓主管視頻中看到的。)

六、練習

預測this

var fn = function(one, two){    log(this, one, two);};var r ={ }, g = {}, b = {};r.method = fn;r.method(g,b);

 答案是: r 對象。g,b  是one ,two。沒疑問吧。r點method 這個是對象吧。對象this

             當函數被作為某個對象的方法調用時,this等於那個對象。

var fn = function(one, two){    log(this, one, two);};var r ={ }, g = {}, b = {};r.method = fn;fn(g,b);

答案是全域:因為這次不是作為函數調用

var x = "我是全域變數";    //定義全域變數xfunction a(){         //定義函數類結構a    this.x = "我是在函數類結構a中聲明的哦";    }//定義普通函數,彈出當前指標所包含的變數x的值function f(){           alert (this.x);}f.call(new a());

call()的官方解釋,“調用一個對象的一個方法,以另一個對象替換當前對象。”,

f.call(new a())就是把函數(其實也是對象)f複製到被調用對象“new a()”下面去解析.我的理解是還沒細細研究。

new 這個我還沒學到。

關鍵在於this,對,關鍵還是在於this的範圍。this的範圍不是定義它的函數的範圍,而是執行時的範圍。

 

對於JavaScript中this關鍵字的理解

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.