返回
apply、call、bind 函数手写实现,搞懂更轻松
前端
2023-12-07 01:34:46
在 JavaScript 中,apply、call 和 bind 函数都是用来改变函数的 this 指向的,但它们之间还是存在着一些细微的差异。
apply
apply 函数接受两个参数:第一个参数是将要被调用的函数,第二个参数是一个数组,其中包含了要传递给该函数的参数。当 apply 函数被调用时,它会将第一个参数作为 this 指向,然后将第二个参数中的元素作为参数传递给该函数。
function greet(name) {
console.log(`Hello, ${name}!`);
}
const person = {
name: 'John'
};
greet.apply(person, ['Mary']); // Hello, Mary!
call
call 函数与 apply 函数非常相似,但它接受的参数有所不同。call 函数接受三个参数:第一个参数是将要被调用的函数,第二个参数是将作为 this 指向的值,第三个参数是一个包含要传递给该函数的参数的数组。当 call 函数被调用时,它会将第二个参数作为 this 指向,然后将第三个参数中的元素作为参数传递给该函数。
function greet(name) {
console.log(`Hello, ${name}!`);
}
const person = {
name: 'John'
};
greet.call(person, 'Mary'); // Hello, Mary!
bind
bind 函数与 apply 和 call 函数有所不同,它不会立即调用函数,而是返回一个新的函数。这个新函数的 this 指向被绑定到了 bind 函数的第一个参数,而传递给 bind 函数的其他参数则作为新函数的参数。当这个新函数被调用时,它会使用 bind 函数的第一个参数作为 this 指向,并将传递给它的参数作为参数。
function greet(name) {
console.log(`Hello, ${name}!`);
}
const person = {
name: 'John'
};
const greetJohn = greet.bind(person);
greetJohn('Mary'); // Hello, Mary!
总结
apply、call 和 bind 函数都是用来改变函数的 this 指向的,但它们之间还是存在着一些细微的差异。
- apply 函数接受两个参数:第一个参数是将要被调用的函数,第二个参数是一个数组,其中包含了要传递给该函数的参数。
- call 函数接受三个参数:第一个参数是将要被调用的函数,第二个参数是将作为 this 指向的值,第三个参数是一个包含要传递给该函数的参数的数组。
- bind 函数与 apply 和 call 函数有所不同,它不会立即调用函数,而是返回一个新的函数。这个新函数的 this 指向被绑定到了 bind 函数的第一个参数,而传递给 bind 函数的其他参数则作为新函数的参数。
希望本文能帮助你更好地理解 apply、call 和 bind 函数的原理和使用方法。