JavaScript——this/call/apply/bind

110 阅读2分钟

一、对this的理解

this 是执行上下文中的一个属性,它指向最后一次调用这个方法的对象。在实际开发中,this 的指向可以通过四种调用模式来判断。

  • 第一种是函数调用模式,当一个函数不是一个对象的属性时,直接作为函数来调用时,this 指向全局对象。
  • 第二种是方法调用模式,如果一个函数作为一个对象的方法来调用时,this 指向这个对象。
  • 第三种是构造器调用模式,如果一个函数用 new 调用时,函数执行前会新创建一个对象,this 指向这个新创建的对象。
  • 第四种是 apply 、 call 和 bind 调用模式,这三个方法都可以显示指定调用函数this 指向。

二、apply/call/bind的理解

1.使用:

apply: 方法接收两个参数:第一个是 this 绑定的对象,一个是参数数组

call : 方法接收的参数,第一个是 this 绑定的对象,后面的其余参数是传入函数执行的参数。也就是说,在使用 call() 方法时,传递给函数的参数必须逐个列举出来。

bind: 方法通过传入一个对象,返回一个 this 绑定了传入对象的新函数。这个函数的 this 指向除了使用 new 时会被改变,其他情况下都不会改变。

2.apply 和 call 的区别

    不同点:主要是参数传递的方式不同

    相同点:

            1)、产生的效果或作用完全相同

            2)、至少有一个参数

            3)、第一个参数必须有且只有一个对象(Object)

使用场景:

    什么时候使用call:参数个数较少,且参数个数确定

    什么时候使用apply:参数个数较多,且参数个数不确定

这四种方式,使用构造器调用模式的优先级最高,然后是 apply、call 和 bind 调用模式,然后是方法调用模式,然后是函数调用模式。