七、this
001 - 对 this
对象的理解
this
是函数中的隐含参数,由浏览器自动传递
根据函数的调用方式不同,this
的值也不同,this指的是函数运行时所在的“环境”
- 以函数的形式调用,
this
是window
- 以方法的形式调用,
this
是调用方法的对象
- 以构造函数的形式调用,
this
是新建的对象
- 以
call
和apply
的形式调用,this
是它们的第一个参数
- 箭头函数中的
this
由它外层作用域
决定 - 事件的回调函数中,
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 指向,从第二个参数开始往后,每个参数被依次传入函数。