call 方法call 方法用于调用一个函数,并在调用时显式指定 this 值和单独的参数列表。
语法:
function.call(thisArg, arg1, arg2, ...)
示例:
function greet(greeting, punctuation) {
console.log(greeting + ', ' + this.name + punctuation);
}
const person = { name: 'Alice' };
greet.call(person, 'Hello', '!'); // 输出: Hello, Alice!
解析:
thisArg:在函数执行时用作 this 的值。arg1, arg2, ...:依次传递给函数的参数。apply 方法apply 方法用于调用一个函数,并在调用时显式指定 this 值和参数数组。
语法:
function.apply(thisArg, [argsArray])
示例:
function greet(greeting, punctuation) {
console.log(greeting + ', ' + this.name + punctuation);
}
const person = { name: 'Alice' };
greet.apply(person, ['Hello', '!']); // 输出: Hello, Alice!
解析:
thisArg:在函数执行时用作 this 的值。[argsArray]:传递给函数的参数数组。bind 方法bind 方法用于创建一个新的函数,当调用这个新函数时,this 值被指定为提供的值,同时可以预设一些参数。
语法:
function.bind(thisArg, arg1, arg2, ...)
示例:
function greet(greeting, punctuation) {
console.log(greeting + ', ' + this.name + punctuation);
}
const person = { name: 'Alice' };
const boundGreet = greet.bind(person, 'Hello');
boundGreet('!'); // 输出: Hello, Alice!
解析:
thisArg:在新函数执行时用作 this 的值。arg1, arg2, ...:创建新函数时预设的参数。call 和 apply 都是立即调用函数,区别在于传递参数的方式:call 以逗号分隔的参数列表形式传递,apply 以数组形式传递。bind 不会立即调用函数,而是返回一个新的函数,并预设 this 值和参数,当新函数被调用时,这些预设的值会生效。示例:
function sum(a, b, c) {
return a + b + c;
}
const numbers = [1, 2, 3];
console.log(sum.call(null, 1, 2, 3)); // 输出: 6
console.log(sum.apply(null, numbers)); // 输出: 6
const addFive = sum.bind(null, 5);
console.log(addFive(3, 2)); // 输出: 10
在这个例子中,我们可以看到 call 和 apply 的区别在于参数的传递方式,而 bind 创建了一个新的函数 addFive,并预设第一个参数为 5。