js 四種函數調用模式

   看js語言精粹,還在慢慢啃,啃到了一些以前沒想到過的就在博客上記錄一下吧。號外一下,工做室的漢子有時候太他媽沒有節操了!!大家沒節操就算了,當着個人面,這都什麼鬼(崩潰中),不說這些沒用的,進入正題吧。設計模式

   調用一個函數會暫停當前函數的執行,傳遞控制權和參數給新函數。那麼新函數會有哪些個參數呢,這就涉及到上節閉包裏講到的活動對象了,每一個函數除了聲明時定義的形參,還有兩個this,arguments。this是個灰常重要的參數咯,它的值取決於調用的模式。在js中一共有4中調用模式:方法調用模式,函數調用模式,構造器調用模式,apply調用模式。數組

     說到這裏,怎麼調用一個函數呢,就是跟在表達式以後的一對括號(),括號裏面能夠有一個或多個參數。當實際參數的個數和形參個數不匹配時,不會致使運行時錯誤。若是實參過多了,超出部分被忽略,若是實參過少了,確實的被代替爲undefined。對傳進去的實參不會進行類型檢查,任何類型的值均可以傳進函數。好,題外話也補充完畢,講講四個模式吧。閉包

     1.方法調用模式app

   當一個函數被保存爲對象的一個屬性時,咱們稱它爲一個方法。當一個方法被調用時,this被綁定到該對象。若是調用表達式包含一個提取屬性的動做(即包含一個.或者[]),那麼它就被當作一個方法來調用。由於this被綁定到這個對象,因此方法可使用this訪問本身所屬的對象,因此能從對象中取值或者進行修改。this對對形象的綁定發生在調用的時候,經過this取得所屬對象的上下文的方法稱爲公共方法。函數

        2.函數調用模式this

         當一個函數並不是一個對象的屬性時,就被當作一個函數來調用。prototype

      好比var sum = add(3,5);設計

    這種模式調用函數時,this被綁定到全局對象。這種設計模式致使內部函數被調用時,this理想是應該綁定到外部函數的this,但是很是遺憾,它的this是等於全局的window。這種模式致使方法不能利用內部函數來幫助工做,不能共享該方法對對象的訪問權。說歸說,問題仍是要解決的,那麼怎麼解決呢。就是該方法(外部函數)定義一個變量並把它賦值給this,即that = this,那麼內部函數就能夠經過that來訪問到外部函數的this。也是一個通俗的好方法。對象

    3.構造器調用模式作用域

    這個調用模式跟原型有關,原型啊前面講過了的這裏就不囉嗦了。若是正在一個函數前面帶上new調用,那麼背地裏將會建立一個鏈接到該函數的prototype成員的想你對象,同時this會被綁定到那個新對象上。構造器函數,就是建立的目的就是爲了提供new調用的一個函數吧。

    4.apply調用模式

     apply方法接受兩個參數傳遞給調用函數,一個是要綁定給this的值,還有一個是參數數組。array本質就是改變一個方法或者對形象的做用域,改變它的this值,再給它傳參數。若是第一個參數傳null/undefined時,表明this就是全局的,等於window.

相關文章
相關標籤/搜索