七、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 指向,从第二个参数开始往后,每个参数被依次传入函数。