javascript中函數的四種調用模式詳解


介紹函數四種調用模式前,我們先來了解一下函數和方法的概念,其實函數和方法本質是一樣,就是稱呼不一樣而已。函數:如果一個函數與任何對象關系,就稱該函數為函數。方法:如果一個函數作為一個對象屬性存在,我們就稱之為方法。接下來就可以開始今天的主體。

1、函數調用模式。

就是通過函數來調用,規范寫法為:function fn(){} fn(); 函數中this的指向->window。案例如下:

    var age = 38;
    var obj = {
        age: 18,
        getAge: function() {

            function foo() {
                console.log(this.age); // 因為是函數調用模式,所以this指向window全局變量,所以輸出為38
            }
            // 只看這個函數是怎么調用,不管函數是在哪聲明的!
            foo();
        }
    };

    obj.getAge();

2、方法調用模式。

就是通過對象的屬性來調用,規范寫法為:

    var obj = {
        say: function() {
            console.log(this);
        }
    };
    obj.say();

函數中this的指向->當前對象。案例如下:

  var age = 38;
    var obj = {
        age: 18,
        getAge: function() {
            console.log(this.age);// 18
        }
    };

    obj.getAge();//因為是方法調用模式,this指向當前的對象obj。

3、構造函數模式

如果是作為構造函數來調用,那么this就是指向:new創建的新對象!規范寫法為:

 function foo() {
        this.name = "123";
    }
    var f0 = new foo();

  沒有找到合適的案例,為大家見諒!!!

4、函數上下文(借用方法模式)。

上下文模式中this的指向和前三種模式不一樣,它的this指向可以改變,而前三種模式是固定。函數上下文在我理解就是函數作用域。基本語法:apply和call 后面都是跟兩個參數

apply和call第一個參數一樣:表示使用那個對象來調用函數;apply第二個參數是:是一個數組或偽數組,數組的值做為函數的參數被傳入;call第二個參數是:是基本數據類型(number string boolean);案例如下:

  //1:求一個數組中的最大值
  方法一:常規寫法
    var arr = [9, 1, 4, 101, 7, 22, 8];
    var maxNum = arr[0],
        i = 1, len = arr.length;

    for(; i < len; i++) {
        if(arr[i] > maxNum) {
            maxNum = arr[i];
        }
    }
    console.log(maxNum);

  方法二:使用上下文調用模式(apply);
    var arr = [9, 1, 4, 101, 7, 22, 8];
   var maxNum=Math.max.apply(window,arr);//Math.max是window中的排序方法我們可以通過apply借用window中Math.max方法來對數組進行排序。
    console.log(maxNum);


免責聲明!

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



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