關於JS中的this關鍵字

來源:互聯網
上載者:User

標籤:

阮一峰大神說:它代表函數運行時,自動產生的一個內部對象,只能在函數內部使用。

 

  this關鍵字雖然會根據環境變化,但是它始終指向的是調用當前函數的那個對象。在JS中調用函數的模式可以分為4種:

 

  1、方法調用模式

    當函數被儲存為一個對象的屬性時,它就可以稱為這個對象的方法。當一個方法被調用時,this被綁定到這個對象上。如果調用運算式包含一個提取屬性的動作(.或[]),那麼他被稱為方法調用。例如:

    var name="window";

    var object={

      name:"北落";

      sayName:function(){

        console.log(this.name);

      }

    }

    object.sayName();  /*北落*/

    sayName函數作為對象object的方法調用,所以函數體中的this代表object對象。

 

  2、函數調用模式

    當一個函數並非一個對象的屬性時,那麼它就是被當作函數來調用的。在此種模式下,this被綁定為全域對象,在瀏覽器環境下就是window對象。例如:

    var name="北落";

    function sayName(){

      console.log(this.name);

    }

    sayName();  /*北落*/

    sayName以函數模式調用,所以函數體中的this指向的是window對象。

 

  3、建構函式模式

    如果在一個函數前面加上new關鍵字來調用,那麼就會建立一個串連到該函數的prototype成員的新對象,同時,this會被綁定到這個新對象上。這種情況下,這個函數就可以成為此對象的建構函式。例如:

    function object(){

      this.name="北落";

    }

    var person=new object();

    console.log(person.name);

    object作為建構函式被調用,函數體內的this被綁定為新建立的對象person。

 

  4、apply調用模式

    在JS中,所有函數也是對象,所有函數對象都有兩個方法:apply和call,這兩個方法可以讓我們構建一個參數數組傳遞給調用函數,也允許我們改變this的指向。例如:

    var name="北落";

    var person={

      name:"南落";

    };

    function sayName(){

      console.log(this.name);

    }

    sayName();  /*北落*/

    sayName.apply(person);  /*南落*/

    sayName.apply();  /*北落*/

    當以函數調用模式調用sayName時,this代表window;當用apply模式調用sayName,並給它傳入的第一個參數為person時,this被綁定到person對象上。如果不給apply傳入任何參數,則this代表window。

關於JS中的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.