js中的call,apply,bind
时间: 2023-05-31 12:19:23 浏览: 118
### 回答1:
call、apply和bind都是JavaScript中的函数方法,它们都可以用来改变函数的this指向。
1. call方法:可以改变函数的this指向,并立即执行该函数。它的第一个参数是要绑定给this的对象,后面的参数是传递给函数的参数列表。
2. apply方法:与call方法类似,也可以改变函数的this指向,但是它的第二个参数是一个数组,其中包含了传递给函数的参数列表。
3. bind方法:可以创建一个新的函数,并将原函数的this指向绑定到指定的对象上。它的第一个参数是要绑定给this的对象,后面的参数是传递给函数的参数列表。与call和apply不同的是,bind方法不会立即执行函数,而是返回一个新的函数,需要手动调用才能执行。
总之,这三个方法都可以用来改变函数的this指向,但是它们的使用场景略有不同。需要根据具体情况来选择使用哪个方法。
### 回答2:
在JavaScript中,call、apply和bind都是用来改变函数执行的上下文的方法。这些方法都是函数的原型方法,可以在任何函数上使用。这些方法的作用是允许你指定函数中的“this”关键字应指向哪个对象。
call和apply的作用是在指定的上下文中调用函数,并且可以传递一个或多个参数。传递给call和apply的第一个参数都是要指定的上下文对象。接下来的参数都会被传递给函数。
call方法和apply方法很像,区别就是call方法接受一系列参数,而apply方法则接受一个数组作为它的第二个参数。
bind方法可以创建一个新的函数,新函数与原来的函数功能相同,只是它的执行上下文和参数已被预设。当你调用bind函数时,它会返回一个新的函数,这个函数的上下文和参数都会在调用bind时被设置。
综上所述,call,apply和bind都是用来改变函数执行的上下文的方法,它们都用于解决函数中“this”关键字的指向问题。call和apply比较适合使用在需要动态传递参数的情况下,而bind方法则比较适合在需要预设参数的情况下。理解了这些方法的用途和作用,便可以更加灵活地运用它们来编写更加优秀的代码。
### 回答3:
JavaScript中的call、apply、bind是函数的三种不同调用方式。
1. call方法
call() 方法可以用来调用一个函数,并设置该函数内部的this关键字为传递给call() 方法的第一个参数。如果函数的第一个参数是null或undefined那么this关键字指向全局对象window。
除了第一个参数,它可以带任意多个参数,这些参数将按顺序传递给被调用的函数。在ES6之前call方法是改变this上下文的第一种选择。
示例:
function add(a, b) {
return a + b;
}
const result = add.call(null, 2, 3); // 传递 null 到 a 中,参数 [2, 3] 将传递给 b
console.log(result); // 5
2. apply方法
apply() 方法与 call() 方法的作用类似,它可以用来调用一个函数,并设置该函数内部的this关键字为传递给apply()方法的第一个参数,不同的是apply方法第二个参数是一个数组或类数组对象。
参数传递的方式同样是按顺序传递给被调用的函数。
示例:
function add(a, b) {
return a + b;
}
const arr = [2, 3];
const result = add.apply(null, arr); // 传递 null 到 a 中,参数 [2, 3] 将传递给 b
console.log(result); // 5
3. bind方法
bind() 方法也是用来改变函数内部的this关键字的,但是与call() 和 apply() 不同的是,它不会立即调用被调用的函数,而是返回一个新的函数,新函数的this被指定为bind()方法的第一个参数。bind方法返回的函数可以传递参数,在被调用原函数时,这些参数会跟在传递给bind的参数后面传递。
示例:
var person = {
firstName: 'John',
lastName: 'Doe',
getFullName: function() {
return this.firstName + ' ' + this.lastName;
}
}
var getUserData = function(message, callback) {
console.log(message + ": " + callback());
};
var boundFunct = person.getFullName.bind(person);
getUserData('User name', boundFunct); // User name: John Doe
在开发中,可以根据具体的使用场景选择使用哪种方法。当需要立即调用函数并附加一些参数时,使用call() 或 apply()。当想先创建一个对象并在之后的某个时间点调用该函数时,使用bind()。
阅读全文