bind、call或者apply方法。区别
时间: 2023-09-14 19:10:33 浏览: 101
bind、call和apply是 JavaScript 中用于改变函数执行上下文(即this指向)的方法,它们之间有以下区别:
1. bind方法:bind方法会创建一个新函数,并将原函数的this指向绑定到指定的对象。bind方法的返回值是一个绑定了指定上下文的函数,不会立即执行,需要手动调用。同时,bind方法可以接收多个参数,在绑定上下文之后,还可以传入额外的参数供函数调用时使用。
2. call方法:call方法会立即调用函数,并将原函数的this指向绑定到指定的对象。call方法的第一个参数是要绑定的对象,后续参数是传递给函数的参数列表。call方法可以接收多个参数。
3. apply方法:apply方法与call方法类似,也会立即调用函数并将原函数的this指向绑定到指定的对象。但是,apply方法接收两个参数,第一个参数是要绑定的对象,第二个参数是一个数组或类数组对象,其中包含了传递给函数的参数列表。
总结:
- bind方法创建一个新函数,并将this指向绑定到指定对象,不会立即执行。
- call方法立即调用函数,并将this指向绑定到指定对象,后续参数以逗号分隔传入。
- apply方法立即调用函数,并将this指向绑定到指定对象,参数以数组或类数组对象形式传入。
相关问题
使用bind、call或者apply方法
你可以使用`bind`、`call`或者`apply`方法来改变函数的执行上下文。
`bind`方法创建一个新的函数,并将指定的对象绑定为新函数的上下文。它不会立即执行函数,而是返回一个新函数,稍后可以调用。
示例代码:
```javascript
function greeting() {
console.log(`Hello, ${this.name}!`);
}
const person = {
name: 'Alice'
};
const greetPerson = greeting.bind(person);
greetPerson(); // 输出:Hello, Alice!
```
`call`方法在指定的上下文中立即执行函数,并将指定的参数作为参数传递给函数。
示例代码:
```javascript
function greeting() {
console.log(`Hello, ${this.name}!`);
}
const person = {
name: 'Alice'
};
greeting.call(person); // 输出:Hello, Alice!
```
`apply`方法与`call`方法类似,不同之处在于它接受一个包含参数的数组作为参数。
示例代码:
```javascript
function greeting(greetingType) {
console.log(`${greetingType}, ${this.name}!`);
}
const person = {
name: 'Alice'
};
greeting.apply(person, ['Hello']); // 输出:Hello, Alice!
```
这些方法可以帮助你灵活地改变函数的执行上下文,适用于各种情况。
bind、call或者apply方法的具体使用说是
这三个方法都是用来改变 JavaScript 函数中的 this 指向的。下面是它们的具体使用方法:
1. bind
bind() 方法会创建一个新函数,称为绑定函数。当调用绑定函数时,绑定函数会以其创建时传入 bind() 方法的第一个参数作为 this,传入的其他参数会作为绑定函数的参数,接着调用原函数并返回原函数的执行结果。bind() 方法不会执行原函数。
示例代码:
```
const obj = {
name: '小明',
sayHello: function(age) {
console.log(`我叫${this.name},今年${age}岁。`);
}
};
const newObj = { name: '小红' };
const bindFunc = obj.sayHello.bind(newObj, 18);
bindFunc(); // 输出:我叫小红,今年18岁。
```
2. call
call() 方法会调用函数,并将传入的第一个参数作为 this,其他参数作为函数的参数,接着返回函数的执行结果。
示例代码:
```
const obj = {
name: '小明',
sayHello: function(age) {
console.log(`我叫${this.name},今年${age}岁。`);
}
};
const newObj = { name: '小红' };
obj.sayHello.call(newObj, 18); // 输出:我叫小红,今年18岁。
```
3. apply
apply() 方法与 call() 方法类似,不同之处在于传入参数的方式。apply() 方法接受一个参数数组,数组中的第一个元素作为 this,其他元素作为函数的参数,接着返回函数的执行结果。
示例代码:
```
const obj = {
name: '小明',
sayHello: function(age) {
console.log(`我叫${this.name},今年${age}岁。`);
}
};
const newObj = { name: '小红' };
obj.sayHello.apply(newObj, [18]); // 输出:我叫小红,今年18岁。
```
阅读全文