JavaScript 方法調用模式和函數調用模式

來源:互聯網
上載者:User

標籤:span   命名   strong   儲存   包含   var   java   logs   code   

這兩天在讀《JavaScript語言精粹》關於第4章函數調用的幾種模式琢磨了半天。

這裡就說一下方法調用模式跟函數調用模式。


方法調用模式:

當一個函數被儲存為對象的一個屬性時,我們稱它為一個方法。當一個方法被調用時,this被綁定到該對象。如果調用運算式包含一個提取屬性的動作(a.name或a[name]),那麼他就是被當做一個方法調用。

1 var myObject = {2     value:1,3     double:function(){ //double是myObject對象的一個方法4         this.value = this.value*2;5     }6 };7 myObject.double(); //2

函數調用模式:

當一個函數並非一個對象的屬性時,那麼他就是被當做一個函數來調用的:

此時要注意,以此模式調用函數時,this被綁定到全域對象。

 1 var myObject = { 2     value:1 3 }; 4 myObject.double =function () { 5     var helper = function () {  //helper不是對象的屬性,因此this指向全域對象Window 6         this.value = this.value*2; 7     } 8     helper(); 9 } ;10 myObject.double(); //1,value的值不會發生改變

我們可以為該方法double定義一個變數,並賦值為this,那麼內建函式就可以通過那個變數訪問到this。按照約定,我們把那個變數命名為that:

 1 var myObject = { 2     value:1 3 }; 4 myObject.double = function () { 5     var that = this;    //定義變數that,並給它賦值為this 6     var helper = function () { 7         that.value = that.value*2; 8     } 9     helper();10 }11 myObject.double(); //2,由於間接的訪問了this,value最終發生了改變

 

JavaScript 方法調用模式和函數調用模式

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.