持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第7天,点击查看活动详情
- 为什么我们需要 call()、apply()、bind()?
- 什么是 call()、apply()、bind()?
- 何时使用 call()、apply()、bind()?
传统上,在 javascript 中,您可以拥有拥有自己的属性和方法的对象,一个对象不能使用另一个对象的方法,但是有一种方法可以克服这个限制。 通过使用 call()、apply() 和 bind() 方法将一个函数绑定到一个对象并调用该函数,就好像它属于该对象一样。
我们知道函数是 JavaScript 中一种特殊的对象。所以他们可以访问一些方法和属性。为了证明函数是对象,我们可以这样做,例如:
function printMessage() {
console.log('Welcome!');
}
printMessage.city = 'Bangalore';
// Prints 'Bangalore'
console.log(printMessage.city); //Bangalore
JavaScript 还为每个函数对象提供了一些特殊的方法和属性。所以 JavaScript 中的每个函数都继承了这些方法。调用、绑定和应用是每个函数继承的一些方法。
call()
通过使用 call() 您可以将函数绑定到对象中,这样您就可以调用该函数,就好像它属于该对象一样。
例子:
let object = {
number: 2
}
function add(a,b){
return this.number + a + b;
}
console.log(add.call(object,3,5));// 10
apply()
apply() 方法的作用与 call() 完全相同。
不同之处在于 call() 接受一个参数列表,而 apply() 接受一个数组和一个参数数组。
例子:
let object = {
number: 2
}
function add(a,b){
return this.number + a + b;
}
console.log(add.apply(object,[3,5]));// 10
我们可以使用 apply() 将一个数组追加到另一个数组,例如
const numbers = [1,2,3];
const moreNumbers = [4,5,6];
numbers.push.apply(numbers, moreNumbers);
console.log(numbers); // prints [1,2,3,4,5,6]
bind()
bind() 方法让人想起 call() 和 apply(),但不是立即执行函数,而是 bind() 返回一个可以稍后执行的函数。
例子:
let object = {
number: 2
}
function add(a,b){
return this.number + a + b;
}
const func = add.bind(object,3,5);
console.log(func())
// prints 10
使用 bind() 进行函数柯里###化
例子:
let multiply = function(x,y){
console.log(x * y); //prints 10
}
let multiplyByTwo = multiply.bind(this, 2);
multiplyByTwo(5);
在此示例中,我们创建了 multiply 函数,它将两个参数 x 和 y 相乘并将其记录到控制台。
现在让我们创建另一个函数 multiplyByTwo,它正是 multiply 的副本。我们通常会通过在 multiply 上执行 bind 方法来创建这个副本。在这里,我们通常会传递一些参数。我们将传递的第二个参数是 2。
正如我们所知,当我们调用 bind 方法时,会给出 multiply 方法的副本,而不是直接调用它。所以这意味着值 2 将被设置为 x 的值。所以现在让我们执行 multiplyByTwo 函数。
最后
如果你觉得本文对你有帮助的话,麻烦点个赞,加个关注,后续还会继续更新这方面的内容。感谢阅读,很高兴在评论部分听到反馈和建议。