`this.some_property` 在匿名回调函数中变为未定义

2024-01-20

所以我不太明白为什么这个变量这个任务在我的目标对象内部的添加事件侦听器中变得未定义。我有一种感觉,它可能与异步编程有关(我仍然不完全理解)。抱歉,我有点 JS 菜鸟,但是如果你们能向我解释我做错了什么以及什么可能是更好的解决方案,那就太棒了!谢谢。

function Goal(name) {
        this.gDiv =  document.createElement('div');
        this.name = name || "goal";
        this.tasks = document.createElement('ul');
        //Sets the styling and content and adds it to the parent element
        this.initialize = function() {
            this.gDiv.className = "default";
            this.gDiv.setAttribute("id", this.name);
            this.gDiv.innerHTML = this.name;
            elem.appendChild(this.gDiv);

            this.gDiv.parentNode.insertBefore(this.tasks, this.gDiv.nextSibling);
            this.tasks.style.display = "none";


        };  
        //Creates a list underneath the a dive associated with the Goal object
        this.addTask = function(task) {
            var newLi = document.createElement('li');
                newLi.innerHTML = task;
                this.tasks.appendChild(newLi);
        };

        this.gDiv.addEventListener('click', function(){
            alert(this.tasks);              
        });

    }

感谢你们!你们都回答了我的问题!我对此已经摸不着头脑有一段时间了。向大家致敬!


当您输入匿名闭包并且“this”发生变化时,范围就会发生变化。你可以通过这样做来破解它

var self = this;

然后使用 self 代替它(例如):

function Goal(name) {
    var self = this;

    /* ... */

    this.gDiv.addEventListener('click', function(){
        alert(self.tasks);              
    });

如果你使用 jQuery,你可以做一些更好的事情:

this.gDiv.addEventListener('click', $.proxy(function() {
    alert(this.tasks);
 }, this));

无论哪种方式都很好。

编辑:在 ES6 中,可以使用箭头函数,因为它们不绑定自己的“this”,所以它变得更加简单:

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

`this.some_property` 在匿名回调函数中变为未定义 的相关文章

  • 使用 jquery 远程图像属性

    目前我正在尝试获取远程图像宽度 高度 我正在开发一个链接共享模块 就像当你在 Facebook 上粘贴链接时 你可以看到标题 描述和图像 所以我尝试使用 php getimagesize 来获取图像宽度 高度 但速度非常慢 所以我正在考虑使
  • 如何使用 JavaScript 创建链接?

    我有一个标题字符串和一个链接字符串 我不知道如何将两者放在一起以使用 JavaScript 在页面上创建链接 任何帮助表示赞赏 我试图解决这个问题的原因是因为我有一个 RSS 源并且有一个标题和 URL 列表 我想将标题链接到 URL 以使
  • 是否存在 IsCallable 为 false 但 IsConstructor 为 true 的 JS 对象?

    ECMAScript 规范函数可调用 https www ecma international org ecma 262 6 0 index html sec iscallable当且仅当其参数具有 Call 内部方法时返回 true 它在
  • Javascript Promise“then”始终运行,即使 Promise 未能执行

    我希望当调用第二个 then 时不执行第三个 then 但是 即使 Promise 被拒绝 调用第二个 then 并且代码返回 rejected 然后返回 undefined 它仍然调用第三个 then 如何不运行第三个 then 这样 未
  • 为什么 iife 在一个简单的例子中不起作用?

    我不明白为什么函数表达式调用不起作用并抛出错误 你能给我解释一下吗 var a function x alert x function a 1 谢谢大家 任务比我想象的要容易得多 这是因为 JS 将 IIFE 解析为函数的参数调用 这样做时
  • IE从哪个版本开始支持Object.create(null)?

    您可以通过多种方式在 JavaScript 中创建对象 creates an object which makes the Object prototype of data var data1 new Object Object liter
  • Chrome 中的性能问题

    我目前正在从事一个相对较大的项目 使用 AngularJs 构建 应用程序的一部分是一个表单 您可以向其中添加任意数量的页面 不幸的是 添加了很多不必要的垃圾 即表示表单模型的对象可能会变得非常大 在某些时候 Chrome 基本上无法处理它
  • 带有淘汰赛js的隐形recaptcha

    我正在完成隐形验证码 但我在实现它时遇到问题 谷歌开发人员页面中的代码显示它应该是这样的
  • 使用 dc.js 按条形值对条形图中的条形进行排序(排序)

    如何通过维度的计算值而不是维度本身的名称对 dc js 示例中的 x 轴 维度 进行排序 例如 请考虑序数条形图的 dc js 示例 https github com dc js dc js blob master web examples
  • Snap.svg - 停止在可悬停元素的子元素上重新触发悬停事件

    对于一个项目 我使用的 SVG 形状由背景多边形和背景多边形上方的一些文本 我已将其转换为路径 组成 我正在使用 Snap svg 为我的形状设置动画 当我将鼠标悬停在多边形上时 形状应该缩放到特定尺寸 包括其中的所有内容 鼠标移开时 形状
  • Draggable JS Bootstrap 模式 - 性能问题

    对于工作中的项目 我们在 JavaScript 中使用 Bootstrap Modal 窗口 我们想让一些窗口可移动 但我们遇到了 JQuery 的性能问题 myModal draggable handle modal header Exa
  • 将 GMT 时间转换为当地时间

    我以这种格式从我的服务器获取 GMT 时间 Fri 18 Oct 2013 11 38 23 GMT 我的要求是使用Javascript将此时间转换为本地时间 例如 如果用户来自印度 首先我需要采用时区 5 30并将其添加到我的服务器时间并
  • 设置 cookie 时中断 JavaScript 执行

    当设置 cookie 时 是否可以始终中断浏览器开发人员工具中的 javascript 执行 无需显式设置 JS 断点 document cookie 在 html head 块的开头添加此代码片段效果很好
  • 页面上使用 HTML Editor Extender 进行回发会导致 IE11 中出现 JavaScript 错误

    我已将 HTML 编辑器扩展程序添加到我正在处理的页面中 现在每当我在页面上发回帖子时 都会收到以下 Javascript 错误 JavaScript 运行时错误 参数无效 之后什么也没有发生 这在 IE10 或更低版本以及我所知道的所有其
  • 使用 Vue 的多模式组件

    我在 Vue 中实现动态模式组件时遇到问题 A common approach I follow to display a set of data fetched from the db is I dump each of the rows
  • 如何使用 crypto-js 解密 AES ECB

    我正在尝试将加密数据从 flash 客户端 发送到服务器端的 javascript 在 asp 中作为 jscript 运行 有几个 javascript Aes 库 但它们实际上没有文档记录 我正在尝试使用 crypto js 但无法让代
  • 在 Shopify 商店中嵌入 Vue 组件

    在产品页面中 我尝试显示自定义 Vue 组件 为简洁起见 该组件根据给定的产品 ID 显示 Firebase 数据库中的一些信息 我最初尝试将其制作为 Shopify 应用程序 以便我可以访问他们的 API 我实现了 OAuth 并且可以检
  • 带参数的事件监听器

    我想将参数传递给 JavaScript 中的事件侦听器 我已经找到了解决方案 但我无法理解它们为什么或如何工作以及为什么其他解决方案不起作用 我有 C C 背景 但是 Javascript 函数的执行有很大不同 您能否帮助我理解以下示例如何
  • 从 FileReader 设置背景图像样式

    我正在寻找一种解决方案 允许我从文件上传输入中获取文件并通过设置 document body style backgroundImage 来预览它 以下代码用于在 Image 元素中显示预览 function setImage id tar
  • 使用 MongoDB 和 Nodejs 插入和查询日期

    我需要一些帮助在 mongodb 和 nodejs 中按日期查找记录 我将日期添加到抓取脚本中的 json 对象 如下所示 jsonObj last updated new Date 该对象被插入到 mongodb 中 我可以看到如下 la

随机推荐

  • React Hook useEffect 缺少依赖项

    我在构建我的应用程序时遇到这个问题 任何人都知道出了什么问题吗 React Hook useEffect 缺少依赖项 conectar 包含它或删除依赖项数组react hooks exhaustive deps const Grafico
  • 加密 ASP.NET connetionStrings 的正确方法是什么?

    我一直在研究 ASP NET MVC 应用程序 NET 4 0 中加密连接字符串 Web config 的几个示例 似乎有两种通用方法可以实现它 示例1 https web archive org web 20211020203213 ht
  • 通过 Sparklyr 以本地模式运行 Spark 时,如何配置驱动程序内存?

    我正在使用 Sparklyr 在具有 244GB RAM 的虚拟机上以本地模式运行 Spark 应用程序 在我的代码中我使用spark read csv 从一个文件夹读取约 50MB 的 csv 然后从第二个文件夹读取约 1 5GB 的 c
  • 在 Angular 2 中使用 React 组件

    我有一组 React 组件 我正在尝试在 Angular 2 应用程序中使用它们 这是我尝试使用的主要 React 组件 import React Component from react import createStore applyM
  • Church 风格核心中缺少类型变量会发生什么情况?

    这有点深奥 但令人抓狂 在回答中另一个问题 https stackoverflow com questions 7074322 haskell type system nuances 我注意到在这个完全有效的程序中 poo String g
  • 如何将(鼠标)事件“转发”到kineticjs中较低Zindex上的节点/形状

    我正在使用kineticjs 其中有一个包含一层的舞台 该层上有多个形状 它们对鼠标悬停事件做出反应 它们显示工具提示 除了这些形状之外 我还有一些位于较高 ZIndex 上的文本节点 因此它们位于形状上方 这一切都工作正常 但有一个例外
  • 如何在 firebase 托管上使用 node.js 处理根路径请求?

    我正在使用 firebase 托管 功能开发网络系统 尽管在 firebase json 上指定了重写规则 路由的一部分不起作用 root functions index js routes index js views index jad
  • 更新标记位置 Google 地图 V3

    我对 javascript 东西还是个新手 目前正在假装它 直到我成功了 哈哈 现在我遇到了一座小山 我正在努力克服它 S 目前 我的脚本查找用户位置并向地图添加图钉 同时将 LatLon 复制到某些表单字段 除了放大用户位置之外 我希望他
  • 无法在 Android Studio 0.2.5 上“制作项目”Android Maven

    我正在尝试在 Android Studio 0 2 5 上构建 Android Maven 项目当我使用命令行构建时没问题 mvn clean install 但是 当按 Android Studio 工具栏上的 make project
  • 为什么当shared_ptr调用派生和基析构函数时,unique_ptr只调用基析构函数? [复制]

    这个问题在这里已经有答案了 为什么以下代码的输出会根据我是否使用shared ptr or unique ptr 的输出shared ptr这是有道理的 因为该对象已完全被破坏 而在unique ptr 只有基类部分被破坏 我以为当我使用智
  • Android:通过视频动态模糊表面

    我正在构建一个 Android 应用程序 其中 ExoPlayer 在 SurfaceView 的表面上播放视频 并且我正在研究是否可以动态模糊播放的视频 涉及首先生成要模糊的视图位图的模糊技术将不起作用 因为 SurfaceView 的表
  • WIX 安装程序未正确显示 WixUI 对话框的自定义图像

    In my WIX我正在使用自定义安装程序WixUIDialogBmp安装人员的图像Welcome and Completion页 但如下图所示 图像无法正确显示 我正在尝试遵循这个官方文档 http wixtoolset org docu
  • 解决这个分配珠子难题的算法?

    假设你有一个圆圈 如下所示 N点 并且你有N珠子分布在槽中 Here s an example 每个珠子都可以顺时针移动X插槽 这需要花费X 2美元 您的目标是最终在每个槽中获得一颗珠子 完成这项任务至少需要花多少钱 这个问题更有趣的变体
  • 加载后获取 Highcharts 系列数据

    我试图在调用 Highcharts 图表并将其加载到页面后获取系列数据 到目前为止 我只成功地获得了一堆字符串 这显然不是我想要的 不知道是否有人可以帮助我解决这个问题 jQuery 代码 success function chartDat
  • Spring AOP 创建额外的 bean

    我正在玩Spring AOP 这是一个简单的类 public class CModel extends Car private double torqueMeasure 1 public CModel System out println
  • 如何使用 kubernetes python 客户端排空节点?

    我正在尝试使用官方的 kubernetes 工作节点自动化kubernetes python 客户端 https github com kubernetes incubator client python 我目前正在寻找一种方法安全地将所有
  • Jena Fuseki 服务器命令未找到

    我是 Jena Fuseki 服务器的新手 根据链接http jena apache org documentation serving data index html http jena apache org documentation
  • 如何在 jenkins 上使用 ant 从 .product 构建 eclipse rcp 应用程序

    我想构建一个 Eclipse RCP 应用程序 我有一个产品配置文件和一个带有许多第三方插件的目标平台 从 Eclipse IDE 的导出工作完美无缺 但这很难说是专业的 所以我也想让它在詹金斯上工作 构建服务器从 SVN 获取文件 没有
  • matlab/octave - 广义矩阵乘法

    我想做一个函数来概括矩阵乘法 基本上 它应该能够执行标准矩阵乘法 但它应该允许通过任何其他函数更改两个二元运算符的乘积 和 目标是在 CPU 和内存方面尽可能高效 当然 它的效率总是低于 A B 但操作员的灵活性是这里的重点 这是我阅读后可
  • `this.some_property` 在匿名回调函数中变为未定义

    所以我不太明白为什么这个变量这个任务在我的目标对象内部的添加事件侦听器中变得未定义 我有一种感觉 它可能与异步编程有关 我仍然不完全理解 抱歉 我有点 JS 菜鸟 但是如果你们能向我解释我做错了什么以及什么可能是更好的解决方案 那就太棒了