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 指向, 第二个是一个数组, 里面是参数