如何改变this指向?
在接触this指向问题,相信很多同学都面临this指向的问题,有些时候我们在对象方法内部使用this。而并不想让this指向当前本对象,这时候该怎么办呢?答案就是改变this指向,该如何改变this指向呢,请往下看。
①:call()方法可以在调用时改变this指向

案例call方法代码片段
可以看出我们再调用obj里面的say方法的时候调用使用了一个call方法,将this指向改变到了window,也就是全局。所以当调用say方法会打印外部的x,也就是2。我们又在调用时向函数内部传入了一个参数,所以函数内部的this.x就是2传入一个2所以sum的值就是4
call()方法的具体用法
call()方法是在调用时改变this指向,括号内部的第一个参数是要指向的对象,第二个参数是调用函数的实参,如果有多个参数就依次在后面传入
②:apply()方法可以在调用时改变this指向

案例apply方法代码片段
两种方式都可以改变this指向,不同的地方是call和apply传参方式不同,apply给函数传参是以一个集合的形式传入,如果是多个参数,就在集合内部依次写入
③bind()方法可以在定义时改变this指向

案例bind方法代码片段
bind()和call()传参方式相同,但是何时改变this指向不同。bind()方法是在定义时改变this指向。如上代码所示,定义obj2的时候将obj里的say的方法赋给给了obj2,此时obj2就是一个函数。因为暴露在全局,所以obj2的this是指向window也就是2.我们要让obj2也指向obj。就在赋值的时候bind一下,此时在调用obj2。打印结果就是1 指向了obj。