对于JavaScript开发者有必要理解apply、call与bind方法的不同点。它们的共同点是第一个参数都是this,改变函数执行时的上下文。
首先我们先了解call、apply、bind使用
-
call()方法
作用:
调用一个对象的一个方法,以另一个对象替换当前对象
方法:
call([thisObj[,arg1[, arg2[, [,.argN]]]]])
参数:
thisObj可选项。将被用作当前对象的对象。arg1, arg2, , argN 可选项。将被传递方法参数序列。
说明:
call 方法可以用来代替另一个对象调用一个方法。call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象。 -
apply()方法
作用:
应用某一对象的一个方法,用另一个对象替换当前对象。
语法:
apply([thisObj[,argArray]])
参数:
thisObj可选项。将被用作当前对象的对象。argArray 伪数组参数。如果没有提供 argArray 和 thisObj 任何一个参数,那么 Global 对象将被用作 thisObj, 并且无法被传递任何参数。
说明:
如果 argArray 不是一个有效的数组或者不是 arguments 对象,那么将导致一个 TypeError。 -
bind()方法
作用:
顾名思义,就是绑定的意思,。
方法:
fun.bind(this,arg1,arg2,…)
说明:
bind()方法会创建一个新的函数,称为绑定函数,fun方法在this环境下调用
该方法可传入两个参数,第一个参数作为this,第二个及以后的参数则作为函数的参数调用
三者之间的区别
-
call() 和apply()的第一个参数相同,就是指定的对象。这个对象就是该函数的执行上下文。
-
call()和apply()的区别就在于,两者之间的参数。 call()在第一个参数之后的
后续所有参数就是传入该函数的值。apply() 只有两个参数,第一个是对象,第二个是数组,这个数组就是该函数的参数。 -
bind() 方法和前两者不同在于: bind()方法会返回执行上下文被改变的函数而不会立即执行,而前两者是直接执行该函数。他的参数和call()相同。