返回
call、apply、bind详解,了解这些方法的用法、区别以及适用场景
前端
2023-10-28 03:37:29
前言
call、apply、bind在日常开发中时常用到,它们的作用都是改变this指向,或者说是借用方法。而本篇将重点介绍它们的用法、区别以及适用场景。
基本语法
Function.prototype.call(context, ...args)
Function.prototype.apply(context, [args])
Function.prototype.bind(context, ...args)
- call() 方法接受两个参数:第一个参数是要改变this指向的对象,第二个参数及以后的参数是要传递给被调用的函数的参数。
- apply() 方法也接受两个参数:第一个参数是要改变this指向的对象,第二个参数是一个数组,其中包含要传递给被调用的函数的参数。
- bind() 方法与call()和apply()方法类似,但它不立即执行函数,而是返回一个新的函数。这个新的函数的this指向被绑定到了第一个参数,并且第二个参数及以后的参数被预先传递给了这个函数。
三者的区别
call和apply本质上来说并没有什么区别,作用都是一致的,它们的差别体现在传入参数的方式上。call()方法需要将参数逐个传入,而apply()方法则可以将参数放在一个数组中传入。
bind()方法与call()和apply()方法不同,它不立即执行函数,而是返回一个新的函数。这个新的函数的this指向被绑定到了第一个参数,并且第二个参数及以后的参数被预先传递给了这个函数。
适用场景
- call() 方法通常用于将一个函数应用到另一个对象上,而无需修改该函数本身。例如,我们可以使用call()方法来将一个数组的forEach()方法应用到一个对象上,以遍历对象的属性。
- apply() 方法通常用于将一个函数应用到另一个对象上,并且需要传递一个参数数组。例如,我们可以使用apply()方法来将一个函数应用到一个对象上,并将该函数的参数放在一个数组中。
- bind() 方法通常用于创建一个新的函数,该函数的this指向被绑定到指定的对象。例如,我们可以使用bind()方法来创建一个新的函数,该函数的this指向被绑定到一个对象,并且该函数的参数被预先传递给了该函数。
总结
call、apply、bind都是JavaScript中用来改变this指向的方法。它们的作用都是借用一个方法,并将其应用到另一个对象上。这三个方法的用法、区别以及适用场景如下:
- call() 方法接受两个参数:第一个参数是要改变this指向的对象,第二个参数及以后的参数是要传递给被调用的函数的参数。
- apply() 方法也接受两个参数:第一个参数是要改变this指向的对象,第二个参数是一个数组,其中包含要传递给被调用的函数的参数。
- bind() 方法与call()和apply()方法类似,但它不立即执行函数,而是返回一个新的函数。这个新的函数的this指向被绑定到了第一个参数,并且第二个参数及以后的参数被预先传递给了这个函数。
- call() 方法通常用于将一个函数应用到另一个对象上,而无需修改该函数本身。
- apply() 方法通常用于将一个函数应用到另一个对象上,并且需要传递一个参数数组。
- bind() 方法通常用于创建一个新的函数,该函数的this指向被绑定到指定的对象。