javascript – TypeScript:那么“这个”范围究竟是什么?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript – TypeScript:那么“这个”范围究竟是什么?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1780字,纯文字阅读大概需要3分钟。
内容图文
我有这段打字稿代码:
constructor($triggerHref: JQuery) {
// stuff...
var _this = this;
$(document).on("click",$triggerHref.selector,e=>{
e.preventDefault();
var target = $(e.srcElement).attr("data-pcc-sort-trigger");
if (target == _this.active)
_this.load(target, !_this.isDescending);
else _this.load(target, false);
});
}
如果我删除var _this = this;并且只是在事件处理程序中使用它,生成的js代码看起来相当相同(无论如何都会生成_this),但由于某种原因,this.active和this.load()是未定义的.
我对TS的范围的理解是()=> {}方法保留了它们的父节点,并且只有function(){}方法像通常的JS方法一样工作.
那为什么这个不适合我呢?
解决方法:
正如您已经注意到的那样,lambda函数在定义lambda函数时捕获它.这可能导致奇怪的结果(也有一个few bugs围绕var _this = this),尽管其中大部分似乎是固定的.
整个语言构造似乎是为了欺骗JavaScript作用域(这是调用该函数的对象).
至于你解释的怪异(this.active和_this.active表现不同),问题的范围内没有解释.
生成的JavaScript(如您所述)应该(几乎)相同.除了编写var _this = this之外;导致_this在同一范围内定义不止一次并破坏了javascript的有效性.这是TypeScript lambdas的一个问题.永远不要在TS中定义_this,因为它是为某些目的而保留的(如果它是免费的,则不进行检查).
TypeScript中没有神奇之处.执行的是它生成的JavaScript.检查是否有东西覆盖_this在同一范围内(这很容易发现,因为var _this的范围是构造函数的范围,var也隐藏了来自外部范围的同名变量,所以它应该在里面构造函数).
我现在避免在TypeScript中使用lambda表达式.使用简单的匿名函数,不需要您重构任何代码.将其保存到其他变量可以被认为是丑陋的,但是您可以使用$.proxy()来解决它.这样你甚至可以写一个正则表达式替换来将你的lambda更改为$.proxy().目前.
总而言之,我需要调试生成的JS以发现错误,因为您的代码应该在语法上很好.在我看来,TypeScript编译器需要对此进行一些重新思考(我希望一些TS爱好者会有所不同并教会我如何正确完成,因为我不是TS,相反).
我很确定@RyanCavanaugh能够准备一个更好的答案.
内容总结
以上是互联网集市为您收集整理的javascript – TypeScript:那么“这个”范围究竟是什么?全部内容,希望文章能够帮你解决javascript – TypeScript:那么“这个”范围究竟是什么?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。