我正在使用 Polymer 框架,我非常喜欢它。但我不明白的一件事是与 this 指针的混淆。例如,当从自定义组件中的按钮调用函数时,this 指针指向自定义组件。非常合乎逻辑。但是当自定义组件中的函数从外部调用时,例如来自库的回调或来自另一个组件的调用,this 指针是完全不同的。为什么在这种情况下不指向函数所在的自定义组件?
问问题
727 次
1 回答
3
Javascript 在解决问题时有点奇怪this
,通常不会做你想做的事。唯一的优点是它很容易解释和理解。
函数的this
值由它的调用方式设置。假设您有一个val
带有方法的值method
。如果方法被调用,那么在对thenval.method()
的调用中是。如果您改为为该调用执行 then ,则为其他内容(全局上下文对象,在浏览器中为 this )。method
this
val
var theMethod = val.method; theMethod();
this
window
幸运的是,解决方案很简单。调用函数上有一个方法,bind
它返回一个新函数,其中包含不可变的内容this
。所以绑定到.var theMethod = val.method.bind(val); theMethod()
this
val
在未来的许多情况下,我们将能够使用ES6 箭头符号this
在函数定义时获得这种行为,但现在,当传递一个方法时(例如,注册一个事件处理程序)一定要烘烤明确地用bind
.
于 2014-09-08T18:48:24.943 回答