我可以在 TypeScript lambda 中访问另一个 this 吗?

2023-12-22

在打字稿中,我可以写这样的东西:

$('#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(使用前将#替换为@)

我可以在 TypeScript lambda 中访问另一个 this 吗? 的相关文章

随机推荐