我有这两个Typescript类:
class Base {
value: string;
lambdaExample = () => {
this.value = 'one';
}
methodExample() {
this.value = 'two';
}
}
class Child extends Base {
lambdaExample = () => {
super.lambdaExample(); // Error, because I've overwritten (instead of overridden) the method
this.value = 'three'; // ok
}
methodExample() => {
super.methodExample(); // ok
this.value = 'four'; // Error: this refers to window, not to the actual this
}
}
Run Code Online (Sandbox Code Playgroud)
我怎样写我的这样一种方式,方法this的引用是可靠的,而且我可以覆盖的方法和从父类打电话给他们?
实际上,在Microsoft 的 Git Wiki上可以很好地了解解决此问题的不同方法。本质上可以归结为:
实际的 Wiki 中还有更多规定,我强烈建议您阅读整篇内容。
编辑
包装的一个例子:
鉴于班级
class SomeClass {
public someProp: string = "Hello World";
public someMethod() {
console.log(this.someProp);
}
}
Run Code Online (Sandbox Code Playgroud)
如果您要从someMethod(例如)单击处理程序调用 - someEl.onclick = instanceOfMyClass.someMethod;- 将引发异常(假设window没有属性someProp)。
您可以通过将函数绑定到instanceOfMyClass(不是类型安全的,不兼容 ES6)或手动包装它(无论如何,实际上是 bind 正在做的事情)来规避这个问题:
someEl.onclick = function() {
someInstanceOfMyClass.someMethod();
};
Run Code Online (Sandbox Code Playgroud)
它有点冗长和迂腐,但通过将其someMethod作为 的属性调用someInstanceOfMyClass而不将其传递到事件处理程序(这会将其转换为 的属性window),您可以确保this始终是 的实例MyClass。
| 归档时间: |
|
| 查看次数: |
9190 次 |
| 最近记录: |