javascript中函数的四种调用模式详解

介绍函数四种调用模式前,咱们先来了解一下函数和方法的概念,其实函数和方法本质是同样,就是称呼不同而已。函数:若是一个函数与任何对象关系,就称该函数为函数。方法:若是一个函数做为一个对象属性存在,咱们就称之为方法。接下来就能够开始今天的主体。

一、函数调用模式。

就是经过函数来调用,规范写法为: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();

二、方法调用模式。

就是经过对象的属性来调用,规范写法为:

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。

三、构造函数模式

若是是做为构造函数来调用,那么this就是指向:new建立的新对象!规范写法为:

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

  没有找到合适的案例,为你们见谅!!!

四、函数上下文(借用方法模式)。

上下文模式中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);
相关文章
相关标签/搜索