apply和call是JavaScript中两个重要的函数方法,用于改变函数执行时候的this指向。下面将对它们的应用原理进行详细介绍。
一、apply方法
语法:function.apply(thisArg, [argsArray])
apply的第一个参数是改变this指向的对象,第二个参数是一个数组,表示传给函数的参数列表。
举个例子:
```
Function.prototype.apply.call(Math.floor, undefined, [1.75]);
```
上面代码中,apply和call的作用是相同的,将Math.floor方法的this指向了undefined,然后使用apply的第二个参数传递了1.75作为参数。
二、call方法
语法:function.call(thisArg, arg1, arg2, ...)
call方法的第一个参数和apply一样,是改变this指向的对象,之后的参数表示传给函数的参数列表。
例如:
```
function greet() {
var reply = [this.person, 'Is An Awesome', this.role].join(' ');
console.log(reply);
}
var i = {
person: 'Ruiyang',
role: 'Full-Stack Developer'
};
greet.call(i);
```
上面代码中,通过调用call方法,将函数greet中的this指向对象i。call方法后面的参数则是函数greet中需要的参数。
总结
apply和call方法的主要作用,就是改变函数调用的上下文,即函数内部this关键字的值。
apply和call两种方法的区别主要在于参数的传递方式不同。apply将参数作为数组形式传递,而call则将参数作为参数列表传递。在使用时要根据实际情况选择。
另外需要注意的是,apply和call方法并不是优化代码性能的工具,滥用这两个方法会让代码变得难以维护。所以在使用时,要根据实际情况进行选择。