apply()、call()与bind()方法对比

对于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()相同。

猜你喜欢

转载自blog.csdn.net/weixin_44311876/article/details/88855979