【发布时间】:2013-02-24 00:06:24
【问题描述】:
我有这段 Typescript 代码:
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; 行并仅在事件处理程序中使用 this,生成的 js 代码看起来相当相同(无论如何它都会生成 _this),但由于某种原因,this.active 和 this.load() 是未定义。
我对 TS 的作用域的理解是 ()=>{} 方法将 this 与它们的父级保持联系,并且只有 function(){} 方法像通常的 JS 方法一样工作。
那么为什么这个对我不起作用?
【问题讨论】:
-
你的理解是正确的,当我尝试这个时,生成的代码对我来说是相同的。您发现了哪些差异?
-
@JohnnyHK:在调试器中,
this被解析为包裹在$triggerHref中的对象,然后代码存在于(target == undefined)行中而不会引发异常。手动将this放在那里,一切都按预期工作。 -
@JcFx:这真的重要吗??
-
你能发布一个更完整的例子吗?
-
@RyanCavanaugh:我稍后会在空闲时间提供一个(带有逐步复制):)
标签: javascript typescript