js 四種函數調用模式


   看js語言精粹,還在慢慢啃,啃到了一些之前沒想到過的就在博客上記錄一下吧。號外一下,工作室的漢子有時候太他媽沒有節操了!!你們沒節操就算了,當着我的面,這都什么鬼(崩潰中),不說這些沒用的,進入正題吧。

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

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

     1.方法調用模式

   當一個函數被保存為對象的一個屬性時,我們稱它為一個方法。當一個方法被調用時,this被綁定到該對象。如果調用表達式包含一個提取屬性的動作(即包含一個.或者[]),那么它就被當做一個方法來調用。因為this被綁定到這個對象,所以方法可以使用this訪問自己所屬的對象,所以能從對象中取值或者進行修改。this對對形象的綁定發生在調用的時候,通過this取得所屬對象的上下文的方法稱為公共方法。

        2.函數調用模式

         當一個函數並非一個對象的屬性時,就被當做一個函數來調用。

      比如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.

 

 

 

 

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM