call 和 apply区别
时间: 2023-08-09 09:06:49 浏览: 109
`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都是JavaScript中用来调用函数的方法,它们的主要区别在于传递参数的方式不同。call方法传递参数是一个一个地传递,而apply方法则是传递一个数组作为参数。例如,使用call方法调用一个函数:func.call(obj, arg1, arg2, arg3); 而使用apply方法调用同一个函数:func.apply(obj, [arg1, arg2, arg3]);。
call bind apply区别
call、bind和apply都是JavaScript中常用的方法,它们都可以用来改变函数中this的指向。
call和apply的作用相似,都是在调用函数时改变函数中this的指向。不同的是,call是依次列出每个参数,而apply是通过数组传递参数。比如:
```
function sayHello(name, age) {
console.log(`Hello, ${name}. You are ${age} years old.`);
}
sayHello.call(this, "Alice", 18); // Hello, Alice. You are 18 years old.
sayHello.apply(this, ["Bob", 20]); // Hello, Bob. You are 20 years old.
```
bind方法和call、apply方法的区别在于它不会立即执行函数,而是返回一个新的函数并指定了函数中this的指向。这样可以在随后调用这个绑定了this的函数,如:
```
const person = {
name: "Tom",
age: 30,
sayHello: function() {
console.log(`Hello, my name is ${this.name}.`);
}
}
const sayHello = person.sayHello.bind(person);
sayHello(); // Hello, my name is Tom.
```
总的来说,call、bind和apply都是对JavaScript中函数this的指向进行更改的方法,但它们的具体使用方式和效果是有区别的。因此,在不同的使用场景下,要选择合适的方法来改变函数中this的指向。
阅读全文