跳到主要内容

七、this

001 - 对 this 对象的理解

this 是函数中的隐含参数,由浏览器自动传递

根据函数的调用方式不同,this 的值也不同,this指的是函数运行时所在的“环境”

  1. 以函数的形式调用,thiswindow
  2. 以方法的形式调用,this调用方法的对象
  3. 以构造函数的形式调用,this新建的对象
  4. callapply 的形式调用,this它们的第一个参数
  5. 箭头函数中的 this 由它外层作用域决定
  6. 事件的回调函数中,this绑定事件的对象

002 - this/call/apply/bind

apply、call 和 bind 调用模式,这三个方法都可以改变指定调用函数的 this 指向。

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

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

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

003 - call()apply() 的区别

它们的作用一模一样,区别仅在于传入参数的形式的不同。

  • apply 接受两个参数,第一个参数指定了函数体内 this 对象的指向,第二个参数为一个带下标的集合,这个集合可以为数组,也可以为类数组,apply 方法把这个集合中的元素作为参数传递给被调用的函数。
  • call 传入的参数数量不固定,跟 apply 相同的是,第一个参数也是代表函数体内的 this 指向,从第二个参数开始往后,每个参数被依次传入函数。