this绑定得五种场景,默认绑定、隐式绑定、显式绑定、new绑定、箭头函数绑定。
1.this默认绑定
this默认绑定可以理解为函数调用时无任何调用前缀的情景,默认绑定时this指向全局对象(非严格模式)
2.this隐式绑定
首先什么是隐式绑定,如果调用函数时,前面有调用他得对象,那this就会隐式绑定到这个对象上。如果函数调用前存在多个对象,this指向距离调用自己最近的对象(就是常说得谁调用函数this指向谁)。
3.this显示绑定
显示绑定时指我们用了apply/call/bind方法改变this指向得行为。(apply等方法传入指向对象为null或者undefind时,this会指向window)
apply/call/bind得区别:
apply和call在改变this得同时还执行函数,而bind则是返回一个新得绑定函数需再次调用。bind属于硬绑定,返回得新绑定函数得this无法在通过这些方法改变指向,而call与apply的绑定只适用当前调用,调用完就没了,下次要用还得再次绑。call跟apply传参方式不同,call是散参数形式,apply是传一个数组。
4.new 绑定
首先new一个对象发生了什么,以构造器的prototype属性为原型,创建新对象,将this(新对象)和调用参数传给构造器,执行,如果构造器没有手动返回对象,则返回第一步创建的对象这个过程我们称之为构造调用。
5.箭头函数this
箭头函数中没有this,箭头函数的this指向取决于外层作用域中的this,外层作用域或函数的this指向谁,箭头函数中的this便指向谁。除此之外,箭头函数this还有一个特性,那就是一旦箭头函数的this绑定成功,也无法被再次修改,类似硬绑定。