在类方法中键入“this”

2024-01-09

我知道这可能是非常基本的,但我很难理解它。

class Main
{
     constructor()
     {
         requestAnimationFrame(this.update);  //fine    
     }

     update(): void
     {
         requestAnimationFrame(this.update);  //error, because this is window
     }

}

看来我需要一个代理,所以可以说使用 Jquery

class Main
{
     constructor()
     {
         this.updateProxy = $.proxy(this.update, this);
         requestAnimationFrame(this.updateProxy);  //fine    
     }

     updateProxy: () => void
     update(): void
     {
         requestAnimationFrame(this.updateProxy);  //fine
     }

}

但由于我有 Actionscript 3 的背景,我不太确定这里发生了什么。抱歉,我不确定 Javascript 从哪里开始,TypeScript 从哪里结束。

updateProxy: () => void

而且,我也不相信我这样做是正确的。我最不想要的就是我的类中的大部分都有一个 a() 函数,需要使用aProxy()因为我觉得我把同样的事情写了两遍?正常吗?


如果你想thisTypeScript 捕获的实现方式是通过箭头函数。引用安德斯的话:

The this在箭头函数中是词法作用域的

这是我喜欢利用它来发挥我的优势的方式:

class test{
    // Use arrow functions
    func1=(arg:string)=>{
            return arg+" yeah" + this.prop;
    }
    func2=(arg:number)=>{
            return arg+10 + this.prop;
    }       

    // some property on this
    prop = 10;      
}

在 TypeScript Playground 中查看此内容 http://www.typescriptlang.org/Playground/#src=class%20test%7B%0A%09%2F%2F%20Use%20arrow%20functions%0A%09func1%3D(arg%3Astring)%3D%3E%7B%0A%09%09%09return%20arg%2B%22%20yeah%22%20%2B%20this.prop%3B%0A%09%7D%0A%09func2%3D(arg%3Anumber)%3D%3E%7B%0A%09%09%09return%20arg%2B10%20%2B%20this.prop%3B%0A%09%7D%09%09%0A%09%09%0A%09%2F%2F%20some%20property%20on%20this%0A%09prop%20%3D%2010%3B%0A%7D

你可以在生成的 JavaScript 中看到this被捕获outside函数调用:

var _this = this;
this.prop = 10;
this.func1 = function (arg) {
    return arg + " yeah" + _this.prop;
};

so the this函数调用内的值(可以是window)不会被使用。

了解更多:

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在类方法中键入“this” 的相关文章

  • 为现有模块创建 d.ts 文件

    我正在尝试创建一个d ts文件为React 静态容器 https github com reactjs react static container图书馆 NPM 中安装的库如下所示 var React require react var
  • 如何为 jQuery 插件设置私有变量?

    我想创建一个简单的插件 它使用元素的文本作为默认值 或者您可以在调用插件时设置此值 但是 如果我不设置该值 并为多个元素调用插件 则默认值会成倍增加 function fn reText function options var setti
  • Keycloak-js updateToken(minValidity) 需要澄清

    我在Keycloak js中阅读了很多该方法的示例 但没有对以下方法进行明确的解释 updateToken minValidity number KeycloakPromise
  • 将一个文本框的值分配给另一个文本框

    看过类似问题的答案 但对于我的一生 我无法弄清楚我做错了什么 我有两个文本框和一个按钮 当文本添加到第一个文本框并按下按钮时 我想将第一个文本框的值 文本应用到第二个文本框
  • Jquery,在表中设置td的值?

    我创建动态表 tr and td 标签 td 标签之一获取 id detailInfo 我在某个按钮上有一个 onclick 函数 我想在按下按钮后在 td detailInfo 中设置一些值 那么如何设置 id 为 detailInfo
  • 简单 AJAX Get 请求“待处理”

    我正在尝试实现一个简单的 AJAX GET 请求 该请求告诉服务器删除数据库中的文档 虽然我从服务器得到文档已删除的确认 但 Chrome 检查器显示该请求处于 待处理 状态 最终导致服务器错误 我做错了什么 HTML div class
  • jQuery 位置 DIV 固定在滚动顶部

    我有一个相当长的页面 在布局的菜单中 有一个弹出菜单 我希望菜单的弹出部分显示在页面顶部 即使用户已将菜单栏滚动到视图之外 这是菜单的 HTML div div Compare up to 3 cards side by side Clic
  • TypeScript 支持互斥类型吗?

    我有一个带有参数的方法 我希望 TypeScript 验证传入的对象 在编译时 我知道运行时是一种不同的动物 仅满足允许的接口之一 Example interface Person ethnicity string interface Pe
  • 如何设置 jQuery DataTables 中特定列的最大宽度

    如何设置一个特定列的最大宽度 所有其他列应自动调整大小 我已经尝试了下面的代码 但它不起作用 因为我认为没有 最大宽度 属性 table dataTable paging false info false searching false c
  • 如何在ionic 2中创建覆盖页面?

    当我进入新页面时如何创建透明的引导覆盖页面 我如何在 ionic 2 中实现 您可以在外部创建 div
  • pubnub 和 head.js

    有没有人成功整合过pubnub http www pubnub com 和 head js 正确吗 Pubnub http www pubnub com 希望我将他们的脚本放在页面底部并带有 div 就在它前面的标签 这可以确保在最后调用
  • 如何使引导日期选择器只读?

    我正在努力创建嵌入式 内联日期选择器 它不可点击 它应该只显示日期 表现为只读 我正在做的是用模型中选定的日期填充日历 然后我尝试使其不可点击 这样用户就不会认为他可以编辑任何内容 我正在使用 eternicode bootstrap da
  • 以一定时间间隔连续重复运行 JavaScript 函数

    这是我的第一个问题 希望您尽快回答 我想要代码连续重复一个函数 我尝试了一些代码 但没有成功 我尝试了这段代码 我想在一段时间后重复这个功能 我努力了setInterval and setTimeout 但是 我还没有收到结果 这将重复该任
  • jQuery 从选择选项切换 div

    我需要从下拉选择选项框中切换 div 我想要它类似于汇编选择 http www ryancramer com projects asmselect examples example1 html对于 jquery 但我不想列出选项标签 而是希
  • 如何更改自动完成中的结果过滤器?

    我不想进行字面匹配 而是想通过正则表达式选择结果 我可以覆盖自动完成的默认行为来完成此任务还是需要替代结构 有一个内置的方法可以做到这一点 只需提供一个函数source http jqueryui com demos autocomplet
  • ToggleClass 动画 jQuery?

    我的网站上有一个部分 当用户单击时我希望它展开 我正在使用 jQuerytoggleClass为了这 expandable function e e preventDefault this closest article toggleCla
  • 如何检测元素内容何时发生变化

    我正在寻找一种方法来监视元素内动态填充 无页面重新加载 内容 以便我可以将类添加到另一个元素 到目前为止我有这个 HTML div class message container div class messages error span
  • php下拉菜单人口

    我正在尝试编写一个 php 脚本 该脚本将根据主下拉菜单的选择填充第二个下拉菜单 我想使用 jquery 来完成所有非页面刷新的事情 但我发现现有的所有东西都很难理解和修改 你知道有什么写得很好且易于理解的东西吗 或者可能是现有的教程 下面
  • 如何使用 jQuery 或 JavaScript 聚焦 或 标签?

    for var i 0 i
  • 无法使用 HTML 设置未定义 jQuery UI 自动完成的属性“_renderItem”

    我使用以下代码将 jQuery UI 自动完成项呈现为 HTML 这些项目在自动完成控件中正确呈现 但我不断收到此 JavaScript 错误并且无法移动过去 Firefox 无法转换 JavaScript 参数 Chrome 无法设置未定

随机推荐

  • 链接到不带 .lib 的 .dll 文件

    我需要将一些Delphi代码重写为C 并且我们需要链接到动态库TMLComm2004 dll 事实证明我们没有 lib文件 因此我们决定使用以下命令行生成它 dumpbin EXPORTS C Users fayard Desktop TM
  • 如何从 Java 验证 HTML?

    从 Java 验证 HTML 的快速而简单的方法是什么 我正在寻找一个开源 PD 类 或一组类 来描述 100 多个 HTML 标签的各种属性 例如 标签是可选的吗 空的 省略其结束标签是否合法 该标签还可以包含哪些其他标签 如果有 哪些属
  • 所有 JPEG 文件都是 JFIF 吗?

    Active Directory 可以按照 JPEG 文件交换格式 JFIF 存储图像jpegPhoto 属性定义 http msdn microsoft com en us library ms676813 VS 85 aspx 我想使用
  • 如何从 Catch 块返回错误消息。现在返回空

    下面给出了我的 ApiKey 验证示例代码 我使用的是 MVC4 Web api RC public class ApiKeyFilter ActionFilterAttribute public override void OnActio
  • 如何验证关联的模型ID?

    我有一个学生和一个课程模型 学生属于课程 课程有很多学生 class Student lt ActiveRecord Base attr accessible course id name password status studentID
  • Rails:使用现有数据更改现有列的数据类型的影响

    我可能在错误的地方问这个问题 所以如果我是这样的话 请放轻松并为我指出正确的方向 我无法理解使用 Rails 中的现有数据更改现有表中现有列的数据类型将如何影响我正在开发的任何应用程序 如果我有一个名为的布尔列football The fo
  • 通过用户 ID 查询 Google Analytics

    有没有办法使用查询结果核心报告 API v3 https developers google com analytics devguides reporting core v3 并通过以下方式过滤这些结果User ID https deve
  • 在哪里可以找到 Microsoft 应用程序的应用程序 ID URI?

    我正在尝试以我注册的应用程序身份登录 并授予以下权限 Azure 门户 gt 应用程序注册 gt 应用程序注册 预览 gt 我的应用程序名称 API 权限 根据本文档 https learn microsoft com en us grap
  • 如何在 Swift 3.0 中将字符串转换为 UIColor?

    我正在尝试将使用预定义颜色列表的现有程序从 Objective C 转换为 Swift 原始代码使用Selector来提取一个UIColor基于它的名称表示为NSString define UIColorFromRGB rgbValue U
  • 正则表达式使 3 个单词彼此靠近。如何获取他们的上下文?

    我有以下字符串 text I love jam I like all other kinds of confectionery as well cakes and croissants and things Bagels too Carbs
  • 如何执行另一个php脚本?

    如何执行另一个 php 脚本 我想从我的 php 文件执行 3 个 php 脚本 而不需要等待 3 个脚本完成 换句话说 这 3 个 php 文件需要同时执行 并行 而不是一个接一个 顺序 执行 这 3 个脚本位于我的主 php 文件 脚本
  • 使用 PANDAS 在数据帧列中查找多个精确的字符串匹配

    我有数百万个条目数据集 其中包含人类输入的观察结果 以指示某些 操作 结果 尝试创建一些类别 我需要查看此列并提取某些确切的内容 最常用的表达方式 它们可以出现在字符串的开头 结尾或中间 并且可以缩写也可以不缩写 我构建了以下示例 data
  • Netbeans 不会自动缩进 (Java)

    我有一个大学项目 我必须编写一个 Java 应用程序 由于我们使用 Netbeans 作为 IDE 来学习 Java 因此我决定使用此 IDE 来编写应用程序代码 我以前的电脑上从未遇到过这个错误 现在 当我在编写函数或任何其他块后打开 时
  • 加载脚本时何时使用异步与延迟?

    所以我最近了解到 将 js 放在 DOM 底部已经过时了 我应该再次将它们放在具有 async 和 defer 属性 伟大的 但我对根据优先级应该使用哪个感到有点困惑 所以我有 jquery jquery 插件不会立即影响外观 页 对页面外
  • C# wpf 滚动查看器不像 Windows 商店应用程序那样工作

    我目前正在开发一个使用 WPF 的应用程序 我不得不注意到 ScrollViewer 功能与 Windows 应用商店应用程序变体相比的差异 当我位于屏幕边缘和 ScrollViewer 边缘时 我想要滑动以便远离边缘 我看到 Window
  • MySQL IN 子句中的多列

    我有一个数据库 其中有四列 分别对应于起始位置和结束位置的地理坐标 x y 这些列是 x0 y0 x1 y1 我有这四列的索引 序列为 x0 y0 x1 y1 我有一份大约一百个地理对组合的清单 我将如何有效地查询这些数据 我想做这样的事情
  • 没有虚拟构造函数,但有虚拟析构函数

    如果我们没有虚拟构造函数那么为什么我们有虚拟析构函数 构造函数也可以是虚拟的吗 虚拟构造函数没有意义 你确切地声明了什么 类型被创建 并且在编译时是众所周知的 编译器 不需要 并且实际上不能 因为动态调度是基于 仅在创建对象后才创建的信息
  • 如何配置 Maven 2 的 Surefire 插件来运行 Junit 4.5?

    Maven 2 似乎没有考虑我的 Test 和 Ignore 注释 如何配置 Surefire 插件来运行和使用注释 这个问题还没有答案 我首先将您的主 POM 配置为默认将 Surefire 插件设置为最新版本 这是通过向 POM 的插件
  • 表中的错误(数据,引用,dnn = dnn,...):在 R 中运行带有插入符号的混淆矩阵时,所有参数必须具有相同的长度

    我在运行混淆矩阵时遇到问题 这就是我所做的 rf lt caret train tested data training data method rf trControl ctrlInside metric ROC na action na
  • 在类方法中键入“this”

    我知道这可能是非常基本的 但我很难理解它 class Main constructor requestAnimationFrame this update fine update void requestAnimationFrame thi