![]() | 1 xcssum 2017-05-03 12:16:30 +08:00 推荐 你不知道的 js 关于 this 的讲得很详细 |
![]() | 2 IanPeverell 2017-05-03 12:17:07 +08:00 ![]() js 不是很懂,不过 markdown 这个锅你自己背,代码块不是用 ''' 而是用 ``` 不需要解释,而且 V2EX 有预览功能你自己可以先看一下效果再发出来 |
![]() | 3 bumz 2017-05-03 12:24:17 +08:00 JS 中的 this 是运行时根据调用函数的(忘记名字了)确定的,例如 A.click() 中 click 是通过 A.click 调用的,所以 click 中 this 是 A 但如果 var click; (click = A.click)(),此时函数执行前 A.click 已被求值,A 就丢失了,于是 click 中 this 就指向 windows (严格模式为 undefined) function evoke(fn) {fn()} evoke(A.click) 同理,此时 click 已经脱离的 A,this 指向 windows/undefined |
![]() | 4 bumz 2017-05-03 12:25:51 +08:00 evoke(A.click.bind(A)) 把 click 的 this 绑定到 A 即可解决这个问题。 |
5 SuperMild 2017-05-03 12:31:44 +08:00 看《你不知道的 js 》就可以了 |
![]() | 7 wobuhuicode 2017-05-03 13:31:38 +08:00 via iPhone 谁调用指向谁 |
![]() | 8 yoa1q7y 2017-05-03 13:37:08 +08:00 这样理解一下 可以把函数想象成一个工具,比如一把剪刀 如果没人使用它 它就是一个独立存在的东西,此时的 this 就是 undefined (或 window ) 张三用这把剪刀,那 this 就指向张三 很简单 |