1

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

4

1 回答 1

3

Javascript 在解决问题时有点奇怪this,通常不会做你想做的事。唯一的优点是它很容易解释和理解。

函数的this值由它的调用方式设置。假设您有一个val带有方法的值method。如果方法被调用,那么在对thenval.method()的调用中是。如果您改为为该调用执行 then ,则为其他内容(全局上下文对象,在浏览器中为 this )。methodthisvalvar theMethod = val.method; theMethod();thiswindow

幸运的是,解决方案很简单。调用函数上有一个方法,bind它返回一个新函数,其中包含不可变的内容this。所以绑定到.var theMethod = val.method.bind(val); theMethod()thisval

在未来的许多情况下,我们将能够使用ES6 箭头符号this在函数定义时获得这种行为,但现在,当传递一个方法时(例如,注册一个事件处理程序)一定要烘烤明确地用bind.

于 2014-09-08T18:48:24.943 回答