TypeScript:accessouter";这";从一个嵌套的经典函数,而不是打破门楣;没有此别名;规则
我们在TypeScript项目中使用,它包括 这让我想知道如何从嵌套的经典函数访问外部TypeScript:accessouter";这";从一个嵌套的经典函数,而不是打破门楣;没有此别名;规则,typescript,typescript-eslint,Typescript,Typescript Eslint,我们在TypeScript项目中使用,它包括 这让我想知道如何从嵌套的经典函数访问外部this,而不违反这条规则 代码如下: class MyClass { name: string; target: EventTarget; constructor(name: string, target: EventTarget) { this.name = name; this.target = target; } initEventHandlers()
this
,而不违反这条规则
代码如下:
class MyClass {
name: string;
target: EventTarget;
constructor(name: string, target: EventTarget) {
this.name = name;
this.target = target;
}
initEventHandlers() {
const self = this;
function exampleEventHandler(this: EventTarget, e: Event) {
console.log(this.somethingFromTheTarget);
console.log(self.somethingFromMyClass);
}
this.target.addEventListener('exampleEvent', exampleEventHandler);
}
}
从事件库调用事件处理程序函数,使用fn.call(this,e)
将this
设置为事件处理程序范围内的事件目标。显然,使用箭头函数在这里不适用
过梁存在const self=this的问题代码>行
我知道这是允许的:const{thisOneProperty}=this
,然后可以在嵌套函数代码中使用thisOneProperty
。但是,当属性值更新时,这并没有什么好处
这同样有效:constmyclass={t:This}
,然后我可以执行myClass.t
来访问它。但那太难看了
那么,从事件处理程序函数中访问MyClass的this
的“干净”方式是什么呢?测试一下
class-MyClass{
名称:字符串;
目标:事件目标;
构造函数(名称:字符串,目标:EventTarget){
this.name=名称;
this.target=目标;
}
initEventHandlers(){
常数self={
somethingFromMyClass:this.somethingFromMyClass.bind(this)
};
函数exampleEventHandler(this:EventTarget,e:Event){
console.log(这是来自目标的.something);
console.log(self.somethingFromMyClass);
}
this.target.addEventListener('exampleEvent',exampleEventHandler');
}
}
这有什么原因不起作用吗?使用arrow函数并从类的this.target
访问目标,而不是函数的this
。我不确定我是否理解您在这里的意思“事件处理程序函数是从事件库调用的,使用fn.call(this,e)”您可以在arrow函数中捕获访问外部对象的代码,并在处理程序中调用该arrow函数,但如果与外部对象有更多的交互,这可能会变得很糟糕。@lindapaste我文章中的代码被简化了。在实际代码中,有许多目标,并且使用相同的处理函数。我提到了fn.call(this,e)
只是为了显示通过将this
设置为发出事件的对象来调用事件处理程序函数。