Javascript 回调的范围问题

2023-12-04

我在使回调函数正常工作时遇到一些问题。这是我的代码:

SomeObject.prototype.refreshData = function()
{
  var read_obj = new SomeAjaxCall("read_some_data", { }, this.readSuccess, this.readFail);
}

SomeObject.prototype.readSuccess = function(response)
{
    this.data = response;
    this.someList = [];
    for (var i = 0; i < this.data.length; i++)
    {
      var systemData = this.data[i];
      var system = new SomeSystem(systemData);
      this.someList.push(system);
    }
    this.refreshList();
}

基本上 SomeAjaxCall 正在发出 ajax 数据请求。如果成功,我们使用回调“this.readSuccess”,如果失败,则使用“this.readFail”。

我发现 SomeObject.readSuccess 中的“this”是全局 this(又名窗口对象),因为我的回调被作为函数而不是成员方法调用。我的理解是,我需要使用闭包来保留“this”,但是,我无法让它发挥作用。

如果有人能够告诉我我应该做什么,我将不胜感激。我仍在思考闭包如何工作,特别是在这种情况下它们将如何工作。

Thanks!


那么最简单的事情就是将“this.readSuccess”包装在另一个函数中:

SomeObject.prototype.refreshData = function()
{
  var obj = this;
  var read_obj = new SomeAjaxCall("read_some_data", { }, 
    function() { obj.readSuccess(); }, function() { obj.readFail(); });
}

一些 Javascript 框架提供了一个实用程序来将函数“绑定”到对象,这仅仅意味着它为您创建这些小函数之一。请注意,变量“obj”将被这些小函数“记住”,因此当调用处理程序时,“this”引用将指向用于调用“refreshData”的对象。

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

Javascript 回调的范围问题 的相关文章

  • JavaScript 支持逐字字符串吗?

    在 C 中 您可以像这样使用逐字字符串 server share file txt JavaScript中有类似的东西吗 模板字符串支持换行 so you can do this if you want https developer mo
  • 节点遗留 url.parse 已弃用,用什么代替?

    require url parse someurl com page 已被仅弃用 并且我们严格的 linter 对此不满意 我尝试用互联网建议的内容替换我们的代码中的它new URL someurl com page 在大多数情况下都有效
  • Typescript:匿名函数内可能未定义的变量

    太长了 在匿名函数中使用变量之前检查变量仍然 TS 警告变量可能未定义 在下面的代码示例中变量baseDirId检查是否未定义 然后传递给 array map 函数 但 TS 发出警告baseDirId可以是未定义的 Typescript
  • 网络上的等角柱状图

    我计划为游戏的标记 图钉 构建在线地图 但我无法设置标记的正确纬度 原始地图是一个2048 2048px 的正方形 然后我得到了标记 数千个 地图坐标使用 0 到 100 之间的 x y 表示法设置 0 0 是top left角和100 1
  • 玉石压痕错误

    因此 对于我的 Express 网站 我使用 jade 所以我决定尝试修改我的布局文件 以便我可以开始设计我的网站 我修改了原始布局代码 有效 但我开始在任何扩展布局的文件中出现缩进错误 如下所示 500 Error home kevin
  • 如何正确地将节点从引用传递到上下文?

    我正在尝试将节点从引用传递到上下文 但是因为我在第一次渲染后没有重新渲染 所以传递的节 点是null 我考虑了两种变体 但我认为它们不是最好的 To pass ref代替ref current 但在用例中 我将被迫使用类似的东西contex
  • 如何使用 Nextjs/React 将 JSON 对象导出到 Excel?

    我有一个检索 json 对象的端点 如下所示 data id 1 temaIndicador Indian codigo 001 observaciones Interactions Specialist tertiary Regional
  • 如何将焦点设置在 BootStrap 中的第一个输入字段上? [复制]

    这个问题在这里已经有答案了 可能的重复 如何将焦点设置到独立于 id 的 HTML 表单中的第一个输入元素 https stackoverflow com questions 277544 how to set the focus to t
  • NodeJS - 将相对路径转换为绝对路径

    In my 文件系统我的工作目录在这里 C temp a b c d 在 b bb 下有文件 tmp txt C temp a b bb tmp txt 如果我想从工作目录转到该文件 我将使用以下路径 bb tmp txt 如果该文件不存在
  • 如何将React JS状态保存到本地存储中

    我不知道如何将 React js 状态存储到本地存储中 import React Component from react import App css import auth createUserProfileDocument from
  • 基于范围内变量的角度设置形式动作

    我一直在尝试设置一个搜索表单 可以在其中注入表单操作属性 在我的表格中我有
  • 即使我的情况按预期发生变化,Angular ngClass 也不会更新我的课程

    我正在创建的模板中有类似的内容 div class nng 3 div 价值app layout isNavbarFixed等用零或一初始化 并且页面第一次加载时 适当的类被插入到我的div 不过 此后通
  • 为什么 TypeScript 混合了模块和原型模式?

    我正在查看此页面上 TypeScript 生成的 JS 代码 http www typescriptlang org Playground http www typescriptlang org Playground 基本上 要创建一个Gr
  • 如何计算一行中Flexbox项目的数量?

    网格是使用 CSS flexbox 实现的 Example http jsbin com jumosicasi edit html css js output 本示例中的行数为 4 因为我出于演示目的固定了容器宽度 但是 实际上 它可以根据
  • eventSources 到事件 Json,完整日历

    我正在尝试从 eventSources 获取 json 调用到我的事件 我在 eventSources 中返回的 json 是 title Title Test start 1305841052 当我将此字符串传递到事件中时 它会正确显示日
  • 测试 jQueryUI 是否已加载

    我正在尝试调试网站 并且我认为 jQueryUI 可能未正确加载 如何测试 jQueryUI 是否已加载 if jQuery ui UI loaded OR if typeof jQuery ui undefined UI loaded 应
  • 使用严格模式编译指示时如何声明全局变量

    使用自调用函数来包装严格模式兼容代码 通常称为严格模式编译指示 被认为是一种很好的做法 function use strict Strict code here 我的问题是在这种情况下如何声明全局变量 我今天知道的三种替代方案 替代方案 1
  • YouTube 点击时禁用 HTML5

    有没有办法让我们通过javascript禁用HTML5视频的 播放 暂停 点击全屏 功能 然后在我们再次需要时将其放回去 我不知道你是否可以禁用它们 但你可以使用 css 删除它们 video webkit media controls f
  • 拉斐尔路径交叉点不起作用

    我对拉斐尔和 pathIntersection method JSFiddle 示例 http jsfiddle net t6gWt 2 您可以看到有两条线都与曲线相交 但当我使用 pathIntersection method 有一个未解
  • jQuery appendTo(), json 在 IE 6,7,8 中不起作用

    我这两天绞尽脑汁想找到解决办法 我使用 jQuery ajax 从数据库中获取值 以便在另一个框发生更改时更新一个框 php 脚本从数据库中获取值 然后输出 json 它在 FF 中工作正常 但在所有版本的 IE 中 选择框都不会更新 我已

随机推荐

  • 按内容查找 html 元素并使用 jQuery 隐藏

    我正在尝试使用 jquery 查找某些 HTML 中的某些元素 我想查找并隐藏包含标签文本 这是我的测试标签 和 Yest another test label 的列表 id ul class top level list li class
  • 如何在Excel VBA中给出小于一秒的时间延迟?

    我想在小于 1 秒的特定持续时间后重复一个事件 我尝试使用以下代码 Application wait Now TimeValue 00 00 01 但这里的最小延迟时间是一秒 如何延迟半秒 您可以使用 API 调用和睡眠 将其放在模块的顶部
  • 使用displaytag+tiles导出excel的问题

    显示标签 1 2 弹簧 MVC 2 5 6 瓷砖2 0 7 我已经查看了该网站上围绕同一主题区域的其他一些项目 但似乎没有回答如何将显示标记生成的表格导出到 Excel 的问题 我可以导出 保存 xml 和 csv 但不能导出 保存 exc
  • Xcode iOS 按下按钮,然后向上拖动第二个按钮

    假设我想给一个整数加 1 这只有当我按下一个按钮时才会完成UIButton然后松开我的手指到另一个UIButton 拖拽组合 我可以做的最简单的方法是什么IBAction出现在组合中 这可以通过触摸坐标来完成 或者只是UIButtons a
  • 如何在没有时间的情况下获取当前日期?

    我可以使用以下方法获取日期和时间 DateTime now DateTime Now 如何以 DateTime 格式单独获取当前日期和时间 我没有使用 ASP NET C 中的日期时间选择器对话框 好吧 您可以将今天的日期作为DateTim
  • PHPmail 函数中的“无法访问文件:”

    我正在尝试使用 PHPMailer 通过电子邮件发送服务器上存在的文件 当我运行此代码时 我收到 无法访问文件 并且发送的电子邮件没有附件 任何人都可以指导我如何解决此问题 checkyes POST check date date Y m
  • Yahoo! 上的正则表达式管道

    我在胡闹雅虎 管道我在一些正则表达式方面碰壁了 现在我熟悉了 Perl 中的正则表达式 但 Yahoo 中的规则似乎有所不同 管道 我正在做的是获取一个页面并尝试将其转换为提要 我的正则表达式用于从 HTML 中删除链接 效果很好 但我想要
  • Inno Setup - 从外部源(文件或文件夹内容)创建组件/类型的动态列表

    我有一个批处理文件 设置更改器 它使用 xcopy 列出特定文件夹中的特定文件格式 然后允许我输入其中一个名称 脚本使用该名称将该文件复制到另一个位置 首先 xcopy 创建原始副本作为备份 滚动备份仅 1 份 然后进行文件复制 扩展名在批
  • 错误 A2070:在汇编语言中使用嵌套 while 循环时指令操作数无效

    我正在尝试使用 Masm 在汇编中嵌套 while 循环 我在第 15 行 即运行以下代码时内部 while 循环的 endw 指令 收到 错误 A2070 无效指令操作数 INCLUDE Irvine32 inc data i byte
  • apache 无法正确提供静态内容

    我一直在开发自己的 mvc 框架来进一步学习 Web 应用程序 但在提供静态资源时遇到问题 我试图在应用程序中有一个入口点 也称为前端控制器 所以在我的项目中 我有一个 htaccess 文件 它将所有请求重定向到 app 文件夹 其中另一
  • 将两个不同的结构传递给同一个函数

    我有 2 个不同大小的结构 我希望有一个可以将它们传递到其中的函数 但是 我不知道如何定义函数的参数来接受 2 个不同的结构 我的结构如下 struct int a 2 byte int b 2 byte int c 2 byte int
  • 已部署动态 Web 项目的 WebSphere ClassNotFoundException

    Problem 我目前在 WebSphere 7 0 应用程序服务器上部署的 EAR 带有 OpenFaces Web 项目 遇到 ClassNotFoundException EAR 部署没有问题 但是当我从 Web 项目 包含在 EAR
  • 警告:函数“strcmp”的隐式声明[重复]

    这个问题在这里已经有答案了 创建一个简单的代码来扫描两个数字 询问用户是否想要将它们相加或相乘 然后执行运算并打印输出 include
  • BorderLayout 无法正确显示

    我想要一个 JFrame 其中左侧和右侧有一个边框 颜色为黑色 宽度为 withfOfJFrame 10 现在 我的尝试如下所示 JFrame f new JFrame f setSize 800 600 f setLayout new B
  • Rails 4 - Pundit - 索引范围策略

    我正在尝试学习如何将 Pundit 与我的 Rails 4 应用程序一起使用 我有以下型号 class User lt ActiveRecord Base has one profile has many eois end class Pr
  • 任务 MaxDegreeOfParallelism 可以每次从我的列表中获取前 n 个对象吗?

    我正在打开n我的函数中的并发线程 List
  • 查找来自 Service Worker 的活动推送通知的数量

    我已经使用 Service Worker 实现了推送通知 有什么方法可以找出窗口中当前显示的通知数量 我的目的是限制窗口中显示的通知数量 我尝试了以下方法 但 getNotifications 函数返回空数组 self addEventLi
  • Bash shell:如何检查特定的日期格式?

    我有一个 Bash shell 脚本 用于检查 shell 变量是否包含数字 if step 0 9 then exec gt 2 echo error step is Not a step number exit 1 fi 现在我需要执行
  • 如何在微调器中设置下拉箭头?

    我尝试使用下拉箭头设置微调器 但无法修复它 有人可以帮助我吗 我已附上源代码 我的班级文件 import android os Bundle import android view View import android widget Ad
  • Javascript 回调的范围问题

    我在使回调函数正常工作时遇到一些问题 这是我的代码 SomeObject prototype refreshData function var read obj new SomeAjaxCall read some data this re