TypeScript - 如何从事件处理程序方法访问类实例

2024-01-30

在下面的代码片段中,我有一个TypeScript 类和实例方法buz是画布的监听器'click event.

this关键字在buz方法指的是事件的目标对象(画布)。

如何访问foo实例来自buz method?

    class Foo {
        constructor(private _canvas: HTMLCanvasElement, private _message: string) {

        }

        public bar(): void {
            this._canvas.addEventListener(`click`, this.buz);
        }

        private buz(e: MouseEvent): void {
            console.info(`After click event, 'this' refers to canvas and not to the instance of Foo:`);
            console.info(this);
            console.warn(`Message is: "${this._message}"`); // error
        }
    }

    window.addEventListener('load', () => {
        let canvas = <HTMLCanvasElement> document.getElementById('canvas');
        let foo = new Foo(canvas, "Hello World");
        foo.bar();
    });

My tsconfig.json有这些设置:

"compilerOptions": {
  "module": "commonjs",
  "target": "es5",
  "sourceMap": true
},

你的上下文丢失了buz方法,当您将其作为参数传递时。您可以使用箭头函数来实现这一点。箭头函数将保存上下文。

public bar(): void {
    this._canvas.addEventListener(`click`, (evt) => this.buz(evt));
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

TypeScript - 如何从事件处理程序方法访问类实例 的相关文章

随机推荐

  • httplib2 安装时权限被拒绝

    我正在尝试安装适用于 Python 的 httplib2 库 以便我可以使用它与 Twitter 进行交互 但当我尝试通过 python setup py install 进行安装时 我在控制台中收到以下错误 这是一个新的 MBA 我是唯一
  • 在 Node.Js Express 中,“res.render”是否结束 http 请求?

    因此 只有在确定一切都已完成时才执行 res render 对吗 因为它结束了请求并弹出了一个网页 如果您不提供回调res render view options fn 它会自动给出 200 HTTP Status 和 Content Ty
  • “快速路径”无竞争同步是什么意思?

    来自性能和可扩展性的章节JCIP书籍 http jcip net s3 website us east 1 amazonaws com 同步机制针对无竞争的情况进行了优化 case 易失性始终是无争议的 在撰写本文时 快速路径 无竞争同步范
  • 撤消 git 过滤分支

    我不小心使用 git filter branch 从我的存储库中删除了一个文件 git filter branch f index filter git rm cached ignore unmatch images thumb a JPG
  • 在编译时生成唯一的数字

    我想为标题中的每个类生成唯一的数字 在我的例子中为素数 但我们可以说这应该只是连续的数字 即 1 2 3 4 等 当然我可以对这些进行硬编码 struct A enum ID 1 struct B enum ID 2 struct C en
  • 使用 React Navigation,如何强制抽屉导航器弹出到堆栈顶部?

    我正在使用 React Navigation 并有一个抽屉式导航器 其中包含多个 Stack Navigator 作为其项目 当我打开抽屉导航器并单击某个项目时 它会显示我单击的堆栈中的第一个屏幕 当我转到堆栈中的第二个屏幕 然后打开抽屉并
  • JS:查找对象数组中的最大数字

    找到对象数组中最大数字并返回该对象的最简单方法是什么 var arr num 0 5 num 1 num 0 35 尝试使用 forEach 但除了存储每个数字并比较它们之外无法找到一种方法来做到这一点 任何帮助表示赞赏 提前致谢 redu
  • 尝试了解 Latex、Sweave 和 R 之间的工作流程

    假设我编写了以下小 Rnw 文件 documentclass article usepackage utf8 inputenc usepackage Sweave usepackage tikz usepackage pgf begin d
  • SVG 过滤器无法正常工作直线[重复]

    这个问题在这里已经有答案了
  • Visual Studio 不显示打字稿错误

    我遇到了奇怪的问题 我已经安装了 VS2013 和 typescript 当我点击保存按钮时 ts文件 调用 ts 编译器 但 VS 没有显示任何 ts 错误 如果编译器失败我只会收到一条消息 Input file contained se
  • IronRouter 上的上一页位置

    在 IronRouter 中 有没有办法在转到下一页之前获取上一页位置 我可以使用一个事件来获取此信息吗 提前致谢 由于 Iron Router 使用常用的 History API 因此您可以使用普通的 JS 方法 history go 1
  • 动态类型测试未按预期工作

    这是一个SSCCE http sscce org 我有一个地图容器类 其中内部Map是根据需要创建的set被调用的方法 flow use strict class MapContainer map Map
  • Python 跨不同类的 asyncio.Event()

    我正在编写一个 Python 程序来与基于 CAN 总线的设备进行交互 我正在成功使用 python can 模块来实现此目的 我还使用 asyncio 来响应异步事件 我编写了一个由 CanBusSequencer 类使用的 CanBus
  • .NET Compact Framework 能否获得单元格中包含多行文本的网格?

    是否可以使用 NET Compact 框架在网格单元中显示多行文本 我们需要创建一个网格 其中中间列包含一个地址 我们希望通过多行来显示这一点 并 可能 对最后一行应用一些格式 e g 123 任意街伯明翰 B1 2DU tel 0123
  • PhantomJS 不支持 Javascript 国际化 API

    我有一系列Jasmine针对运行的测试AngularJs使用 ECMAScript 国际化 API 的服务 当我通过 Chrome 运行它们时 它们都运行成功 但是 当我使用PhantomJS通过 Maven 运行它们 它们看起来都失败了P
  • T4 报告编译转换:类、结构中的标记“this”无效

    尝试运行 T4 模板不可变对象图 https github com AArnott ImmutableObjectGraph给出的错误为 Error 5 Compiling transformation Invalid token this
  • 使用 minicolors jquery

    我一直在尝试实施迷你颜色 http www abeautifulsite net blog 2011 02 jquery minicolors a color selector for input controls 一切都很好 我已经按照我
  • 如何在 Angular2 中将 HTML 转换为 pdf?

    我需要将动态生成的 html 表转换为 pdf 并能够打印它 我需要它在 angular2 和 Typescript 中完成 JSPDF 适用于 Angular 2 您需要从 dt 下载定义 将库导入为 import as jsPDF fr
  • instanceof 的模式匹配引发令人困惑的错误:表达式类型 Triple 是模式类型 Triple 的子类型

    我有 Java 19 我正在尝试对我创建的记录进行一些简单的模式匹配 然而 Java 给了我一个非常令人困惑的编译错误 这是我可以做的导致错误的最简单的例子 public class ExpressionTypeIsASubsetOfPat
  • TypeScript - 如何从事件处理程序方法访问类实例

    在下面的代码片段中 我有一个TypeScript 类和实例方法buz是画布的监听器 click event this关键字在buz方法指的是事件的目标对象 画布 如何访问foo实例来自buz method class Foo constru