call 和 apply区别
时间: 2023-08-09 15:04:47 浏览: 36
`call` 和 `apply` 都可以用来调用函数并且改变函数内部的 `this` 指向。它们的区别在于传递参数的方式不同。
`call` 方法接收一个参数列表,第一个参数是要改变 `this` 指向的对象,后面的参数是要传递给函数的参数,参数之间用逗号分隔。
```javascript
function sayHello() {
console.log(`Hello ${this.name}`);
}
const person = { name: 'John' };
sayHello.call(person); // 输出:Hello John
```
`apply` 方法接收两个参数,第一个参数是要改变 `this` 指向的对象,第二个参数是一个数组或类数组对象,数组中的元素是要传递给函数的参数。
```javascript
function sayHello(greeting) {
console.log(`${greeting} ${this.name}`);
}
const person = { name: 'John' };
const args = ['Hello'];
sayHello.apply(person, args); // 输出:Hello John
```
总的来说,它们的作用是一样的,只是传递参数的方式不同。
相关问题
call和apply区别
call和apply都是用来改变函数执行上下文(this)的方法,但它们的参数传递方式不同。
在使用call方法时,可以将一个对象指定为函数执行时的上下文,然后在这个上下文中调用函数,同时还可以传递多个参数。例如,假设有一个函数foo,我们可以通过如下代码调用foo,并将一个对象obj作为foo函数中的this对象。
```
foo.call(obj, arg1, arg2, ...);
```
而使用apply方法时,也可以将一个对象指定为函数执行上下文,然后在这个上下文中调用函数,但是参数需要被放在一个数组中传递,而不是逐一传递。例如,假设有一个函数foo,我们可以通过如下代码调用foo,并将一个数组args作为参数传递给它。
```
foo.apply(obj, [arg1, arg2, ...]);
```
因此,call和apply方法的不同点在于参数传递的方式。
call和apply继承的区别
`call` 和 `apply` 都是用来改变函数执行时的上下文对象(即 `this` 关键字所指向的对象)的。它们的区别在于传递参数的方式不同。具体来说:
- `call` 方法接受一个参数列表,参数列表中的每个参数都会传递给函数。例如,`func.call(thisArg, arg1, arg2, ...)` 会将 `this` 关键字设置为 `thisArg`,并将 `arg1`、`arg2` 等参数传递给函数。
- `apply` 方法接受一个包含多个参数的数组作为参数。例如,`func.apply(thisArg, [arg1, arg2, ...])` 会将 `this` 关键字设置为 `thisArg`,并将包含 `arg1`、`arg2` 等参数的数组传递给函数。
因此,`call` 和 `apply` 的主要区别在于传递参数的方式不同。在使用时需要根据实际情况来选择使用哪一个。