apply和call都是用来改变函数运行时this的指向的,区别在于传入的参数不同。
其中,apply接受一个参数数组,call接受一个参数列表。
举个例子:
const obj = {
name: 'Tom'
}
function sayHello(age) {
console.log(Hello, my name is ${this.name} and I am ${age} years old.
);
}
sayHello.apply(obj, [18]); // Hello, my name is Tom and I am 18 years old.
sayHello.call(obj, 18); // Hello, my name is Tom and I am 18 years old.
可以看到,上述两种方式都能够改变函数sayHello运行时的this指向为obj,并且都能够传入age参数。
但是,apply需要将参数放入一个数组中传入,而call则需要将参数依次列出。
另外,如果不传入任何参数,两者的作用是相同的,都是将函数运行时的this指向为传入的对象。