彻底搞懂 call() 和 apply() 方法

call 和 apply 理解前提要明白 this

书上说的是: 改变this指向(看起来很高深)

步入正题:

一般情况下, 我们定义一个函数:

function test () {
    console.log(123);        
}

然后会这样去调用:

test() // 打印123

但是你还可以试试这样调用:

test.call() // 效果和直接调用一样, 其实这才是JS内部调用函数的方式.  apply() 一样

所以, 可以把 call 当作一个对象方法

如果没有参数默认就是直接执行函数,

参数可以是一个, 或者多个

一个的话 :

就是书上说的改变 this 指向, 把函数内部所有的 this 变成那个参数

如果是多个参数 :

第一个当作 this 指向, 其余的当作参数传递

举个栗子 : 

定义一个构造函数: 

function Person (name, age) {
    this.name = name;
    this.age = age;
}

可以这样用:

var person1 = new Person('洋哥', 20);

也可以这样用:

var person2 = {};
Person.call(person2, '洋哥', 20) // 效果和上面的一模一样

// person2 对象传入, 并且执行 Person 构造函数

apply() 和call() 一模一样, 只是call 传入参数方式是直接传入

apply() 就两个参数, 第一个是 this 指向, 第二个是一个数组, 里面是参数

原文地址:https://www.cnblogs.com/jedenzhan/p/9518446.html