this是什么
- 调用对象的方法
识别和引用我们当前正在使用的对象的方法 - 构造函数
在实例化构造函数的过程中,new - 函数调用
如果我们只调用一个普通的日常函数而没有任何这些奇特的对象,那么 这时的this可以做最全局的事情,也就是说这时候this是指向window对象的 - 事件处理程序
系统的阐述this的指向
this的指向只有在函数执行的时候才可以确定到底指向谁,实际上this最终指向的是最后调用它的对象
情况1:如果一个函数中有this,但是它没有被上一级的对象所调用,那么this指向的就是window,这里需要说明的是在js的严格版中this指向的不是window.
情况2:如果一个函数中有this,这个函数有被上一级的对象所调用,那么this指向的就是上一级的对象。
情况3:如果一个函数中有this,这个函数中包含多个对象,尽管这个函数是被最外层的对象所调用,this指向的也只是它上一级的对象
在严格模式中的默认的this不再是window,而是undefined。
如果返回值是一个对象,那么this指向的就是那个返回的对象,如果返回值不是一个对象那么this还是指向函数的实例。
bind/call/apply对this指向的改变
call/apply是直接进行相关函数的调用,bind不会指向相关函数,而是返回一个新的函数,这个新的函数已经自动绑定了新的this指向.
而call和apply的区别主要体现在,参数类型的不同,apply的参数可以是一个数组.
箭头函数中this的指向
箭头函数的this 是根据外层(函数或者全局)上下文来决定的.
this的显式绑定和隐式绑定
通过 call、apply、bind、new 对 this 绑定的情况称为显式绑定;根据调用关系确定的 this 指向称为隐式绑定。
call apply的显式绑定一般来说更加高级.
开放问题: 实现一个bind函数