彻底弄懂bind,apply,call三者的区别
为什么要改变 this 指向?
例子:
1 | var name = 'lucy'; |
可以观察到,正常情况下 say 方法中的 this 是指向调用它的 obj 对象的,而定时器 setTimeout 中的 say 方法中 this 是指向 window 对象的(浏览器中),这是因为 say 方法在定时器中是作为回调函数来执行的,因此回到主线执行时是在全局执行上下文的环境中执行的,但我们需要的是 say 方法中 this 指向对象 obj 对象,因此我们需要修改 this 的指向。