JavaScript初階(七)----------This指向問題

來源:互聯網
上載者:User

標籤:size   就是   console   microsoft   轉換   編譯過程   span   沒有   例子   

模仿jQuery實現鏈式調用模式

   有時候我們需要像jQuery一樣連續調用方法,這時候我們就要用到this了。

  

var deng = {    smoke : function () {         console.log("smoke,cool!!");        return this;    },    firehair : function () {        console.log(‘fire‘);        return this;    },    drink : function () {         console.log("drink");        return this;    }}deng.smoke().firehair().drink();

 

   以上代碼就是實現了鏈式調用,當函數一調用執行就會返回自己。

 

 

 

this指向問題

   1.函數先行編譯過程,this----->window

  2.全域範圍      this -----> window

  3.call / apply,改變this指向,指向第一個參數

  4.object.function() { }     this ------> object

 

  例如:

var obj = {age : 20,smoke : function () {console.log(this);}}var smoke1 = obj.smoke;smoke1();

  

  在這個例子當中,把函數體給smoke1,這時候smoke1執行的時候,就相當於自己執行,沒有人調用它,所以這時候,正常走先行編譯環節,指向的是window。

 

再來個比較複雜的,例如:

              var name = "222";              var a = {                  name : "111",                  say : function () {                      console.log(this.name);                  }              }              var fun = a.say;              fun();  //  222              a.say();  //  111              var b = {                  name : "333",                  say : function (fun) {                      fun();                  }              }              b.say(a.say); // 222              b.say = a.say;               b.say(); // 333

 

  

 

   先是將對象a的函數體給fun,然後fun執行就相當於執行自己的函數,這是this指向的是window,然後對象a調用自己的say方法,這時this指向a,接下來第三個是將a對象裡面的函數體

拿出來自己執行,這時候this指向的是window,最後是將a.say裡面的函數體給了b.say的函數體,這時候this指向b,用的對象a裡面的方法。

 

 

 

屬性的表示方法

  我們一般用obj.prop的方法來引用屬性,但是有時候當我們需要通過變數傳參的形式調用屬性會報錯,所以我們採用下面這種形式

console.log(obj["prop"]);//obj["prop"]

  

  通過這種方法調用屬性,是系統最後的轉換形式,就算我們使用點的形式來進行屬性的調用,系統內部最後還是會將它轉化為中括弧的形式。另外就是,通過中括弧的形式調用屬

性,還能進行屬性的拼接:

           function getProp(num){                var obj = {                    friend1 : "a",                    friend2 : "b",                    friend3 : "c"                }                console.log(obj["friend1"]+num+obj["friend2"]+obj["friend3"]);            }            getProp("e");//aebc

 

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.