聚合物这个指针

时间:2014-09-08 15:20:47

标签: javascript this polymer this-pointer

我使用Polymer框架,我真的很喜欢它。但有一件事我不明白是与这个指针的混淆。当函数从例如自定义组件中的按钮调用时,this-pointer指向自定义组件。很合乎逻辑。但是当自定义组件中的函数从外部调用时,例如来自库的回调或来自另一个组件的调用时,this-pointer就完全不同了。为什么在这种情况下它没有指向函数所在的自定义组件?

1 个答案:

答案 0 :(得分:3)

Javascript在解析this方面有点奇怪,往往没有做你想做的事。唯一的优点是它易于解释和理解。

函数的this值由其调用方式设置。假设您的值为val且方法为method。如果方法被称为val.method(),那么在method的调用中,thisval。如果您改为var theMethod = val.method; theMethod();,那么this就是其他内容(全局上下文对象,在浏览器中为window)。

幸运的是,解决方案很简单。在名为bind的函数上有一个方法,它返回一个新的函数,其中this已无法融入。所以var theMethod = val.method.bind(val); theMethod() this绑定到val

在将来的许多情况下,我们将能够使用ES6 Arrow Notation在函数定义时获取此行为,但是现在,当传递方法时(例如,注册事件处理程序),一定要用this明确地烘烤bind