typescript - 始终引用类的当前实例的 Typescript 关键字
问题描述
可以在 Typescript 中使用“this”或其他仅表示“类的当前实例”的东西,就像在 C# e Java 中一样?而不是 javascript 中通常的绑定上下文含义?
解决方案
在 TypeScript 类中,使用关键字 this 实际上指的是类的当前实例。您可以在文档中看到这一点:
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;
}
}
另一种选择是bind
在传递的函数上使用 JavaScript 函数,并以 this 关键字作为参数,这样函数将具有实例的上下文:
class Greeter {
constructor(message: string) {
handler.addEventListener(this.greet.bind(this));
}
greet() {
return "Hello, " + this.greeting;
}
}
您可以在此处阅读有关“此”的更多信息。
推荐阅读
- oracle-apex-5.1 - 如何检查 APEX 页面项目是否包含特定子字符串
- r - 需要帮助优化 cumsum 之类的代码 - sqldf、data.table、非 equi 连接
- swift - RxSwift,计算有多少相等的连续 Equatable 项目被发射
- go - 反射值接口和指针接收器
- javascript - 将本地模块与 Webpack 4 一起使用会多次捆绑相同的依赖项
- visual-studio - TFS 用户管理视图的问题
- c++ - 抛弃 *this 的 const 会导致未定义的行为吗?
- python - 将数据从视图传递到模板django python?
- java - 如何在正则表达式中使用捕获组作为表达式的开始?
- acumatica - 如何在现代 UI 中创建特定于表单的帮助菜单?