我使用Polymer框架,我真的很喜欢它。但有一件事我不明白是与这个指针的混淆。当函数从例如自定义组件中的按钮调用时,this-pointer指向自定义组件。很合乎逻辑。但是当自定义组件中的函数从外部调用时,例如来自库的回调或来自另一个组件的调用时,this-pointer就完全不同了。为什么在这种情况下它没有指向函数所在的自定义组件?
答案 0 :(得分:3)
Javascript在解析this
方面有点奇怪,往往没有做你想做的事。唯一的优点是它易于解释和理解。
函数的this
值由其调用方式设置。假设您的值为val
且方法为method
。如果方法被称为val.method()
,那么在method
的调用中,this
为val
。如果您改为var theMethod = val.method; theMethod();
,那么this
就是其他内容(全局上下文对象,在浏览器中为window
)。
幸运的是,解决方案很简单。在名为bind
的函数上有一个方法,它返回一个新的函数,其中this
已无法融入。所以var theMethod = val.method.bind(val); theMethod()
this
绑定到val
。
在将来的许多情况下,我们将能够使用ES6 Arrow Notation在函数定义时获取此行为,但是现在,当传递方法时(例如,注册事件处理程序),一定要用this
明确地烘烤bind
。