在打字稿中,我可以写这样的东西:
$('#something').fadeOut(400, (): void => {
this.invokeAnotherMethod();
});
编译时,TypeScript 会自动确保 this 指向我的类而不是所包含的函数:
var _this = this;
$('#something').fadeOut(400, function() {
_this.invokeAnotherMethod();
});
但是,当我需要访问真正的 this 而不是外部 _this 时该怎么办?有语法来引用它吗?例如,我如何编写可以编译为以下内容的代码:
var _this = this;
$('#something').fadeOut(400, function() {
$(this).data('specialhide', true);
_this.invokeAnotherMethod();
});
是否可以?
您需要避免使用粗箭头语法来执行此操作,因为您不想保留this
.
var _me = this;
$('#something').fadeOut(400, function () {
_me.invokeAnotherMethod();
$(this).data('specialhide', true);
});
在这个例子中我使用了_me
而不是_this
以避免与 TypeScript 生成的变量发生任何冲突。我也曾回避过self
,以避免混淆window.self
(感谢 RockResolve)。
The Why!
ECMAScript 6 规范具有箭头函数定义的功能 - TypeScript 语言就是从这里获取此功能的。当 TypeScript 将来瞄准 ECMAScript 6 时,它将留在() =>
语法 - 所以他们不能让它在两种上下文中工作this
而不破坏未来的兼容性。
尽管你可以想象他们如何改变 TypeScript 编译器来使两者_this
and this
在 ECMAScript 3 或 5 中可用,但在版本 6 中实际上会成为问题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)