在Typescript中可以使用“ this”或其他含义,例如C#e Java中的“ class的当前实例”吗?而不像javascript中通常的绑定上下文那样?
答案 0 :(得分:0)
在TypeScript类内部,使用关键字this实际引用该类的当前实例。您可以在documentation中看到它:
class Greeter {
greeting: string;
constructor(message: string) {
this.greeting = message;
}
greet() {
return "Hello, " + this.greeting;
}
}
let greeter = new Greeter("world");
另一方面,对于静态属性,您应该使用类名称引用静态属性(这也是文档中的一个示例):
class Grid {
static origin = {x: 0, y: 0};
calculateDistanceFromOrigin(point: {x: number; y: number;}) {
let xDist = (point.x - Grid.origin.x);
let yDist = (point.y - Grid.origin.y);
return Math.sqrt(xDist * xDist + yDist * yDist) / this.scale;
}
constructor (public scale: number) { }
}
将函数传递给事件处理程序时,可以使用将上下文设置为当前实例的箭头函数语法:
class Greeter {
constructor(message: string) {
handler.addEventListener(this.greet);
}
greet = () => {
return "Hello, " + this.greeting;
}
}
另一种选择是对传递的函数使用JavaScript函数bind
,并以this关键字作为参数,以便该函数具有实例的上下文:
class Greeter {
constructor(message: string) {
handler.addEventListener(this.greet.bind(this));
}
greet() {
return "Hello, " + this.greeting;
}
}
您可以阅读有关“ this” here的更多信息。