js apply call bind
时间: 2023-04-22 17:02:02 浏览: 97
js中的apply、call、bind是三个函数方法,都可以用来改变函数的this指向。
apply和call的作用是一样的,都是改变函数的this指向,并且立即执行该函数。区别在于传入参数的方式不同,apply接收一个数组作为参数,而call则是一个一个参数传入。
bind则是返回一个新的函数,改变函数的this指向,但不会立即执行该函数,需要手动调用。
这三个方法在实际开发中经常用到,特别是在处理函数作为参数传递的情况下,可以方便地改变函数的执行环境。
相关问题
apply call bind
`apply`, `call`, 和 `bind` 都是 JavaScript 中用于调用函数的方法。
`apply` 和 `call` 都是用来改变函数执行时的上下文(即 this 的指向)的。它们的第一个参数都是要绑定给 this 的值。`apply` 的第二个参数是一个数组,它会被作为函数的参数传入;而 `call` 的第二个到第 n 个参数是直接传入函数的参数。
举个例子:
```javascript
function addNumbers(a, b, c) {
return a + b + c;
}
const numbers = [1, 2, 3];
console.log(addNumbers.apply(null, numbers)); // 6
console.log(addNumbers.call(null, ...numbers)); // 6
```
`bind` 方法也可以用来改变函数执行时的上下文,但是它不会立即执行函数,而是返回一个新的函数,这个函数的 this 值会绑定到 bind 的第一个参数。bind 的第二个到第 n 个参数也会被作为函数的参数传入。这个新函数可以稍后执行。
举个例子:
```javascript
function addNumbers(a, b, c) {
return a + b + c;
}
const addTwoNumbers = addNumbers.bind(null, 1, 2);
console.log(addTwoNumbers(3)); // 6
console.log(addTwoNumbers(4)); // 7
```
在这个例子中,`addTwoNumbers` 是一个新函数,它的 this 值被绑定到了 null,前两个参数被固定为 1 和 2。我们可以多次调用这个新函数,并传入第三个参数。
apply call bind写一些案例代码
好的,我可以为您提供一些apply、call和bind的使用案例代码。
1. 使用apply调用函数
```javascript
function sum(x, y) {
return x + y;
}
var arr = [3, 4];
// 将数组 arr 中的元素作为参数传递给 sum 函数
var result = sum.apply(null, arr);
console.log(result); // 7
```
在这个案例中,我们定义了一个求和函数sum,使用apply将数组作为参数传递给sum函数并计算结果。在apply中,第一个参数为null,表示this指向全局对象,第二个参数为一个数组,表示要传递给函数的参数。
2. 使用call调用函数
```javascript
function getProduct(name, price) {
console.log(`${name}的价格是${price}元。`);
}
getProduct.call(null, '苹果', 5.2);
```
在这个案例中,我们定义了一个获取商品信息的函数getProduct,使用call将name和price作为参数传递给getProduct函数并输出结果。在call中,第一个参数为null,表示this指向全局对象,后面的参数依次表示要传递给函数的参数。
3. 使用bind改变函数this指向
```javascript
var person = {
name: '小明',
sayHi: function() {
console.log('Hi, 我是' + this.name);
}
};
var student = {
name: '小红'
};
var sayHi = person.sayHi.bind(student);
sayHi(); // Hi, 我是小红
```
在这个案例中,我们定义了一个person对象和一个student对象,person对象有一个sayHi方法,使用bind将sayHi方法绑定到student对象上并保存到sayHi变量中。调用sayHi函数时,会输出“Hi,我是小红”,因为我们已经将sayHi方法的this指向student对象。
希望这些案例代码可以帮助您更好地理解apply、call和bind函数的使用。
阅读全文