在 JS 中具有正确的“this”值

2024-01-11

我有两个类似的 Javascript“对象”......

var Object2 = new (function() {
    this.FetchData = function(callback) {
        // do some stuff
        callback(data);
    };
});

var Object1 = new (function() {

    this.DisplayStuff = function() {

    };

    this.LoadData = function() {
        Object2.FetchData(this.OnData);
    };

    this.OnData = function(data) {
        // this == window
        this.DisplayStuff();   // doesn't work
    };

});

当Object1收到OnData的回调时,“this”的值被设置为window。有什么方法可以解决这个问题,以便 OnData 内的“this”的值将是 Object1 的实例而不是窗户?


框架中常用的一种技术是让调用者决定要做什么this上下文应该用于回调函数。所以FetchData函数看起来像(感谢@Andy告诉我上下文为空或未定义时的默认范围 - 它是全局对象),

this.FetchData = function(callback, context) {
    callback.call(context, data);
};

打电话时FetchData, pass Object1作为回调的上下文,

Object2.FetchData(this.OnData, this);

另一种选择是绑定OnData功能与Object1 using

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

在 JS 中具有正确的“this”值 的相关文章

  • 如何获取对象的所有属性?

    如何在 JavaScript 中使用反射获取对象的所有属性 循环遍历对象并获取属于该对象且不属于该对象的每个键 一个函数 var properties for var key in obj if obj hasOwnProperty key
  • 跨域XMLHttp请求

    这是我的情况 我有一台 Web 服务器机器 一台客户端机器和第三台运行一些侦听 XMLHttpRequest 的程序的机器 客户端从客户端计算机访问网络服务器 进行一些更改 然后单击 保存 此时 数据被发送回网络服务器和第三台机器 所有这些
  • javascript 中对象的“异步”循环

    通常 我们可以对数组和对象进行循环来迭代属性 值 但循环是阻塞的 但是 超时可用于模拟异步循环 我设法为数组做到了这一点 http jsfiddle net LHhy2 do stuff function asyncLoop i do st
  • Jasmine-jQuery loadFixtures 未定义

    我对整个茉莉花的事情仍然很陌生 在过去的几个小时里我陷入了这个问题 我尝试使用 loadFixture 加载外部夹具文件 我使用 Jasmine 2 0 0 和 Jasmine jQuery 2 0 5 ReferenceError loa
  • Angular 2 Material 2 日期选择器日期格式

    我不知道如何更改材料2日期选择器的日期格式 我已阅读文档 但我不明白我实际上需要做什么 datepicker默认提供的输出日期格式为f e 6 9 2017 我想要实现的目标是将格式更改为类似的格式9 Jun 2017或任何其他 文档htt
  • 仅单击 div 内部

    我正在为一个小网站制作教程 我只想让教程气泡可点击 因此 当我们尝试单击气泡之外的某些内容时 什么也不会发生 换句话说 我希望我的 html 不可点击 而 tutorial bubble 可点击 尝试这个 jQuery function h
  • 在 javascript、jQuery 或 css 中,如何让 div 或 iframe 展开以填充其余空间

    我有三个 iframe 我将顶部 iframe 设置为 50px 高度 将底部 iframe 设置为 50px 但我希望中间 iframe 扩展以填充其余空间 有没有一种技术可以用来对任何窗口屏幕尺寸执行此操作 谢谢 example
  • 打开 md-calendar 时滚动到当前日期

    目前正在构建一个使用 Angular Material 的应用程序 我们需要一个 md calendar 组件 我们想要自定义按钮样式和内容 因此不使用普通的 md datepicker 问题是 当 md calender 打开时 滚动位置
  • 在鼠标光标位置添加 cytoscape 节点

    我想在画布上的单击事件上的鼠标箭头位置添加一个 cytoscape 节点 我怎样才能做到这一点 我的方法 效果不太好 我可以通过单击创建一个节点 但无法确保创建的节点的位置位于我单击的位置 使用这样的东西 cy click function
  • 如何以编程方式退出或关闭 Javascript UWP 应用程序? (Windows 10)

    我制作了一个游戏 它需要自己的退出按钮 我无法使用CoreApplication Exit https msdn microsoft com en us library windows apps windows applicationmod
  • 如何用javascript正确读取php cookies

    考虑这个 php 和 javascript 代码 然后我在控制台中看到的是 utma 111872281 291759993 1444771465 1445374822 1445436904 4 utmz 111872281 1444771
  • 如何在 HTML / Javascript 页面中插入 PHP 下拉列表

    好吧 这是我的第二篇文章 请接受我是一个完全的新手 愿意学习 花了很多时间在各个网站上寻找答案 而且我几乎已经到达了我需要到达的地方 至少在这一点上 我有一个网页 其中有许多 javascript 函数 这些函数一起使用 google 地图
  • 有没有办法将变量从 javascript 导入到 sass 或反之亦然?

    我正在制作一个依赖于块概念的 CSS 网格系统 所以我有一个基本文件 例如 max columns 4 block width 220px block height 150px block margin 10px 它被 mixin 使用 m
  • 为什么将 x 和 y 设置为 0 时 svg 文本会消失?

    我刚刚开始阅读有关svg我提出了以下问题 我正在创建一个简单的svg with a text里面如下图所示 从我的阅读中我了解到x and y of the text标签声明文本在标签内的位置svg space 为什么当我同时设置x and
  • Google 地图 API:忽略 DirectionService 请求中的季节性限制

    我目前正在开发一张地图 其中显示两点之间的最短路线 使用不同的交通工具 我注意到 有时 例如在冬季关闭的道路不会被考虑在内 我发现我可以使用方向服务 下面的代码 忽略高速公路 收费站和渡轮 但我一生都无法弄清楚如何 是否可以忽略季节性限制
  • 计算文本选择的 xy 位置

    我正在尝试使用 DOM 元素创建自己的文本选择 是的 我的意思是当您在此元素中选择文本时 您会在文本后面看到蓝色背景 这个想法是停止默认行为 蓝色 并使用我自己的元素来完成工作 方法是找到选择的 xy 位置 然后放置绝对定位的元素 我希望能
  • 如何在 ASP.NET MVC 3 的 Razor 视图中编码嵌入的 javascript?

    如何在以下上下文中正确编码 JavaScript 我的 JSON 对象中的值是由应用程序管理员设置的 因此我假设它们需要正确编码 对于 HTML 和 JavaScript 都是如此 我在用着System Web Script Seriali
  • Knockout.js 安全绑定

    我想使用带有淘汰赛的安全绑定 为此我使用敲除安全绑定 js https github com brianmhunt knockout secure binding 谁能解释一下为什么下面的代码不起作用 它会抛出一个错误 未捕获 淘汰 安全
  • mozilla pdf.js 没有全视图

    我喜欢这个 pdf 查看器https github com mozilla pdf js https github com mozilla pdf js Demo http mozilla github com pdf js web vie
  • 从输入类型编号获取无效值

    我正在使用输入类型数字 当它无效时 我如何从中获取值 例如 使用类型编号并仅打印 e 这本身是无效的 我正在使用 React 但我认为这个问题非常普遍 onChange event console log event target valu

随机推荐

  • AWS ELB - 多VPC负载均衡

    我正在开发一个项目 其中任务之一是为远程 VPC 中的实例提供 AWS ELB 服务 AWS ELB 位于 VPC A 中 实例位于 VPC B 中 我最初的回答是 否 因为 ELB 是负载均衡器 而不是路由器 文档和使用 AWS ELB
  • 如何在不打开网络浏览器的情况下在spotipy中进行身份验证?

    我尝试了标准方法 主页上有描述 但我需要在没有网络浏览器的情况下登录 我怎样才能做到这一点 您可以使用 Spotify 的 python 库之一 例如 https github com plamere spotipy https githu
  • setMicrophoneMute() 如何工作?

    我一直在尝试使用Android的AudioManager setMicrophoneMute 没有取得多大成功 也就是说 无论我做什么 它都拒绝将麦克风静音 我在网上搜索了一些线索 发现了一些报告类似经历的参考资料 AudioManger
  • 使用 CA 签署的另一个证书签署证书

    是否可以使用由 CA 签名的证书作为其他证书的 CA 来签署新证书 并且仍然由根 CA 验证它们 例子 create new key openssl genrsa des3 out server key 2048 openssl req n
  • 如何将文件复制到android的文件系统?

    如何将文件复制到android中的文件系统 位置 我怎样才能访问它 将文件从android复制到本地 adb pull data data com example sample sample 从本地复制文件到android adb push
  • 对常量值使用 def 与 val 有何含义

    使用有什么影响def vs val在 Scala 中定义一个常量 不可变的值 我显然可以写出以下内容 val x 3 def y 4 var a x y 7 这两种说法有什么区别 哪一种表现更好 是推荐的方式 更惯用 我什么时候会使用其中一
  • 如何给Tomcat添加健康检查?

    我想在 Linux 的 Tomcat 上配置一个简单的健康检查 例如 http localhost 8080 health http localhost 8080 health 我一直在检查Tomcat文档 我发现了这个内置的服务器状态站点
  • 如何安装最新版本的 TensorFlow 2?

    我想知道为什么我无法安装TensorFlow 2 0 0 到目前为止稳定版本在他们的官方网站上 https www tensorflow org versions even in PyPi https pypi org project te
  • python 中的弱引用列表

    我需要一个弱引用列表 当它们消失时会删除它们 目前 我执行此操作的唯一方法是不断刷新列表 手动删除死引用 我知道有一个 WeakKeyDictionary 和一个 WeakValueDictionary 但我真的想要一个 WeakList
  • 构造失败通知:非法构造函数

    我的网站使用从未在移动设备上运行过的桌面通知 但我最近开始在 Android 4 4 上的 Chrome 版本 42 0 2311 108 中收到以下异常 Failed to construct Notification Illegal c
  • 如何在页面 API 中获取图像 url 或下载图像的 url,其中图像是由流场创建的?

    在我的 wagtail 应用程序中 我有一个流字段 用于使用 ImageChooserBlock 上传图像以及标题和文本 这意味着在单个流字段中我有一个标题 一个文本和一个图像上传输入 我正在尝试在其余框架的页面 API 中获取图像 url
  • 将 MomentJS 与 TypeScript 结合使用 - moment() 有什么类型?

    我目前正在将我的项目从 ES5 转换为 ES6 但我遇到了 MomentJS 的问题 version 2 18 1 问题是我有一些变量是 Moment 对象 但我无法对它们调用 moment 一个例子 import as moment fr
  • 使用 javascript 捕获桌面屏幕截图

    是否可以使用javascript捕获客户端Windows桌面的屏幕截图 那么在linux和mac操作系统中呢 澄清 这个问题有not被问到或回答 因为我希望捕获整个桌面 而不仅仅是浏览器 我还想捕获 本机 屏幕截图 而不是从某些底层表示重新
  • 为什么我想在一个函数中锁定两个互斥体 - 这也带有延迟锁?

    https en cppreference com w cpp thread lock tag https en cppreference com w cpp thread lock tag void transfer bank accou
  • Grails UrlMapping 重定向以保持 DRY

    我正在与Grails 2 1 1并希望添加一些映射到控制器操作的自定义 URL 我可以做到这一点 但原始映射仍然有效 例如 我创建了一个映射add property to directory in my UrlMappings如下 clas
  • Python 类继承属性错误 - 为什么?怎么修?

    SO 上的类似问题包括 this one https stackoverflow com questions 10268603 python class inheritance attributeerror subclass object
  • 使用 Let 进行子查询的 Linq

    我试图从这个 Linq 查询中获取的是所有广告的列表 其中最近关联的日志与LogType IsStatus true has a LogType Name已确认或已更新 需要明确的是 一个 Advert 有很多 Log 每个 Log 有一个
  • 在 Android 中创建一个没有 Intent 的重复事件并提醒直到特定日期?

    我有一个 Android 应用程序 可以通过服务下载一些药物信息 例如 fludex white round 2 24 02 2012 表示一种名为fludex 白色圆形的药物 从今天到2012年1月24日必须每天服用2次 现在我想在下载药
  • 在 pygame 中堆叠不同类型的透明度

    我有一个自定义 GUI 模块 它使用树中的对象来管理界面 并以正确的顺序将它们逐一传输 现在 在我的对象中 我有一些只是具有每像素透明度的表面 而其他对象则使用颜色键 我的问题是 当将具有每像素透明度的表面传输到另一个填充有色键的表面时 第
  • 在 JS 中具有正确的“this”值

    我有两个类似的 Javascript 对象 var Object2 new function this FetchData function callback do some stuff callback data var Object1