对 javascript 中的“this”关键字感到困惑

2024-01-06

我已经很长时间没有使用 Javascript 了,今天又重新学习了它。一直让我着迷的一件事是this关键词。我知道在 jQuery 事件处理程序中,例如单击事件,this指的是触发事件的元素。怎么this传递给我作为回调提供的函数,即使我的函数没有参数?

给出以下代码:

$("tr.SummaryTbRow").data("Animating", false);
$("tr.SummaryTbAltRow").data("Animating", false);

$("tr.SummaryTbRow").click(function () {
    if ($(this).data("Animating") == false) {
        if ($(this).next(".Graph").css("display") == "none") {
            $(this).data("Animating", true);

            //Part I am questioning.
            setTimeout(function () {
                $(this).data("Animating", false);
            }(this), 550);

            $(this).next(".Graph").slideRow('down', 500);
        }
        else {
            $(this).data("Animating", true);
            $(this).next(".Graph").slideRow('up', 500);
        }
    }
});

我想弄清楚如何用类传递元素表行SummaryTbRow到我的 setTimeout 回调函数。 jQuery 是否通过this与我对匿名回调函数所做的类似吗?我的吗this函数内部引用this我进去了?

我知道我可以这样做:

setTimeout(function (element) {
    $(element).data("Animating", false);
}(this), 550);

但我想弄清楚 jQuery 是如何能够通过this到我的回调函数,即使我的函数接受 0 个参数。


为了回答你最后一个问题,你可以将你选择的接收者传递给 javascript 中的函数,例如call https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Function/call :

someFunction.call(someObject);

Inside someFunction, thissomeObject.

就你而言,你似乎想要的是

setTimeout(function (element) {
    $(element).data("Animating", false);
}, 550, this); // this will be passed as element to the callback

or (更兼容 https://developer.mozilla.org/en-US/docs/DOM/window.setTimeout)

var _this = this;
setTimeout(function () {
    $(_this).data("Animating", false);
}, 550); 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

对 javascript 中的“this”关键字感到困惑 的相关文章

  • 如何使用 QuerySelector 获得第二个匹配项?

    以下语句给出了该类的第一个元素titanic element document querySelector titanic 我如何检索具有相同类的第二个元素 Use document querySelectorAll https devel
  • jQuery自动完成插件-自定义突出显示功能

    我的每个项目的自动完成结果如下所示 h3 Celebrity Sweepstakes h3 p 0 episodes p 但我只想突出显示 H3 内的标题 请参阅下面的 突出显示 功能 我不知道如何更改原始正则表达式以仅替换标题内的内容 s
  • Node.js 循环发送 http 请求

    我实际上遇到了使用 node js 执行的 javascript 代码的问题 我需要循环发送http请求到远程服务器 我在代码中设置了www google ca 这是我的代码 var http require http var option
  • 如何使用 Selenium webdriver 测试对 SVG 对象的点击?

    我正在尝试编写代码来检查单击 SVG 对象的功能 例如此 URL 上的美国州 http www amcharts com svg maps map usa 这可行 但是有更好的方法吗 不需要物理移动鼠标的东西 robert new Robo
  • 如何在正则表达式中区分数字和ip地址?

    例如 如果我们查看 5 56 和 183 55 0 144 基本上 当你做这样的事情时 d d 它匹配 5 56 189 55 和 0 144 有没有办法通过正则表达式仅匹配数字而不匹配 ip 地址的部分 我尝试使用前瞻 但我不知道它应该是
  • 如何使用 ui-router 中的 ui-sref 将参数传递给控制器

    我需要传递和接收两个参数到我想要转换到的状态ui srefui router 的 例如使用下面的链接将状态转换为home with foo and bar参数 a Go to home state with foo and bar para
  • AngularJS:ng-show 与 display:none

    我有一个用例 我必须使用 CSS 默认隐藏 HTML 元素 如下所示 HTML div class item div CSS item display none 但是 我需要在页面加载后使用 ng show 切换元素的可见性 如下所示 di
  • 可点击的进度条

    我正在使用 Angular 并在 JavaScript 的帮助下开发了一个可点击的进度条 这是我能做到的最好的 有没有办法将滑块放置在进度条内但不干扰进度可视化 堆栈闪电战 https stackblitz com edit angular
  • 如何比较两个对象数组并更改两个数组中找到的对象的值?

    假设我有两个对象数组 let array1 id 1 name snow id 4 name jo id 8 name bran id 12 name gondo id 13 name peter
  • 在 jQuery 中生成下拉菜单的年份

    我想到了一个小问题 我正在尝试想出一种方法来解决它 基本上 我想要做的是将年份减去 18 年 即 2011 年返回 1993 年 并生成一个下拉选项 供用户选择在此之前的任何年份 基本上他们必须证明自己已超过法定年龄 18 岁 var mi
  • 从数据库中给定时间起经过的时间

    我有一个 HTML 表 其中包含从数据库中提取的记录 我正在使用 PHP MySQL 我的表中名为 Timer 的列未从数据库中检索 我需要在此处显示经过的时间 从数据库中的特定时间开始 例如 假设现在的时间是2013年2月21日下午6点2
  • 有没有办法显示嵌套在 Grid 组件内的 Material-UI 抽屉?

    我正在使用 Material UI 创建一个 Web 应用程序 主页分为 3 个网格 每个网格有一个height of 500px 我想在中间网格内显示一个带有一些操作选项的抽屉 那可能吗 到目前为止 我只能在整个屏幕上显示它 这是我的主要
  • 使用 jquery 时出现控制台错误 - Uncaught TypeError: Object # has no method

    我尝试使用以下 js 添加类或 css 样式 但出现控制台错误 var i 0 question i addClass show 收到以下控制台日志错误 Uncaught TypeError Object has no method add
  • 通过ajax POST提交两次表单

    插入到mysql using php通过文件调用AJAX 前insert语句php代码执行select查询到查找重复记录并继续insert statement Issue 从ajax调用php文件时 它执行了两次并得到作为重复记录的响应 好
  • 如何使用 javascript 迭代文件系统目录和文件?

    我正在使用 Javascript 编写一个应用程序 该应用程序将与 Phonegap 一起使用来制作 Android 应用程序 我正在使用 Phonegap File API 来读取目录和文件 相关代码如下所示 document addEv
  • 您最喜欢的 JS/CSS 下拉菜单是什么? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 希望在网站上实现一个 只是好奇其他人都使用过什么以及他们有过什么样的体验 EDIT我也不是一个超级粉丝
  • 在第一页加载时触发 jquery 脚本,然后不再为该用户触发?

    我在我的网站上使用这个 jQuery 模态窗口脚本 http www zurb com playground reveal modal plugin http www zurb com playground reveal modal plu
  • 当 mp4 是唯一来源时,自定义 HTML5 视频控件不起作用

    问题 我只有一个视频源 mp4 因为我正在尝试向 tumblr 视频添加自定义控件 如果只有mp4作为源video duration返回为NaN 作为使用 3 个源 mp4 webm ogg 时的测试 它可以工作 所以video durat
  • 使用 JQuery getJSON 方法

    我正在尝试使用 JQuery getJSON 函数解析 JSON 数据 REST 查询是 http query yahooapis com v1 public yql q select 20woeid 20from 20geo places
  • Django:单击按钮加载另一个模板

    我已经在 django 项目上工作了几个星期 只是玩玩以便掌握它的窍门 我有点困惑 我现在有一个名为 home html 的模板 我想知道是否可以将另一个名为 profile html 的模板设置为 home html 模板上的链接 我有一

随机推荐

  • 如何将 Shell 变量值访问到 Groovy 管道脚本中

    现在我是 Shell Jenkins Groovy pipeline 的新手 我的要求是我正在将文件文本读取到 shell 脚本下的变量中 并且我需要将该变量值从 shell 脚本中传递出来并在 Groovy 脚本中使用 这是我的代码 st
  • 如何在android中创建可变数量的textview

    希望这不是一个坏问题 但是我已经通过 S O 进行了搜索 并且一直没能找到答案 我正在创建一个 Android 应用程序 它本质上是一个闹钟 我希望主要活动显示已创建的所有警报以及有关警报的一些信息 我的问题是如何根据已创建的警报数量创建给
  • TortoiseSVN合并分支到主干

    我知道这个问题已经被问过好几次了 所以我很抱歉再次问这个问题 但我只是想确保我理解不同合并之间的区别 我是这个项目的唯一开发人员 所以我不担心重写其他人的工作 我创建了这个项目的一个分支 因为我即将添加一些新功能 并且如果我需要修复当前代码
  • 用毫秒获取文件的最后修改日期?

    我正在尝试从文件夹中获取某些文件的日期和时间 上次修改 我设法获取日期和小时 分钟 秒 但无法获取毫秒 我已经尝试以所有可能的方式格式化该列 我只得到0毫秒 到目前为止我的代码是 用户选择一个文件夹 该代码在 A 列中显示找到的所有文件名
  • Socket.IO - 无法在 Google Chrome 中加载 XMLHttpRequest

    我试图从在 Chrome 19 0 1048 46 中工作的 socket io 主页获取第一个示例 但出现错误 XMLHttpRequest 无法加载 http localhost 8080 socket io 1 t 133715619
  • 函数 driver.switchTo.frame() 在 Selenium 中不起作用

    当我尝试在 Python 中使用 Selenium 中的 Webdriver 切换到网页上的框架时 它向我显示错误 请在下面找到我的代码 driver switchTo frame frame AttributeError WebDrive
  • Android 原生代码分析

    我正在尝试分析本机 Android 代码 但我得到了 出现以下错误 我正在 Linux 机器上运行代码 tracedmdump 配置文件后处理 痕迹 静态基本块 64525 动态 基本块 87073132 静态指令 412004 动态 说明
  • Windows 批处理,仅选择用户变量

    在环境变量中 我有一个用于用户变量和系统变量的 PATH 变量 在批处理脚本中 为了向用户 PATH 变量附加新的给定路径 我需要选择当前值 不幸的是 PATH 返回用户变量和系统变量的组合 当然 我只想向用户变量添加新的自定义路径值 也没
  • Codeigniter 3.0.0 - 错误 404 页面未找到

    这是我的第一个 php 框架 我的控制器中有一个 php 文件 即 posts php 但是当我尝试运行它 localhost codeigniter index php posts 时 它显示错误 404 应用程序文件夹内的 htacce
  • Azure DevOps 拉取请求线条颜色

    I created a PR and some of lines are marked with red or green colors in newly created file Cannot find what does it mean
  • 如何重新加载 JSF 使用的 ResourceBundles?

    我想通过单击按钮以编程方式重新加载 JSF 使用的 ResourceBundles 类路径中的 ResourceBundles 即 WEB INF classes 由外部应用程序修改 并且我知道修改事件 Try ResourceBundle
  • PHP中的矩阵乘法

    尽管矩阵的顺序应该没问题 但以下代码会抛出异常 这可能是一件我无法注意到的小事 但无法弄清楚
  • Python通过鼠标点击找到最近的乌龟

    我正在使用基于海龟的网格设置创建扫雷风格的游戏 我需要找到网格内最近的单元格并显示位于其下方的图标 无论是炸弹还是数字图标 我不想做到精确 我只需要单击鼠标即可找到网格中最近的单元格 即使单击不是直接在板上 目前 我的代码仅显示板上创建的最
  • 如何读取 Bash 中的任意一个键?

    我可以得到read n 1 KEY获取大多数键 但由多个字符表示的键除外 例如 如果我按向上箭头键 read n 1 echo A A As you can see read only takes the Esc and the A is
  • 使用 Python 加载 CloudFormation YAML

    我有一套YAML我最近转换的 AWS Cloudformation 模板JSON 使用时JSON我能够加载这些模板并使用它们进行转换jinja从中生成一些 Markdown 文档 我正在尝试做同样的事情YAML在Python中 我在 clo
  • 带回调的forceUpdate() 与 this.setState()

    原因是在处理时state具有自己功能的变量 我能想到的有两种方法 一是变异this state直接 嗯 有点 我知道这是不鼓励的 通过调用状态函数 然后调用forceUpdate 并处理由此带来的后果 另外就是做回调函数 哪个是正确的方法
  • Android:从顶部开始圆形进度条(270°)

    我使用以下可绘制对象定义了一个圆形进度条 ciruclar progress bar xml
  • 符合标准的方式来定义我的枚举

    在没有明确正确确定枚举范围的情况下 如何摆脱警告 符合标准的代码将与foo bar mUpload see here https stackoverflow com questions 514194 using enum inside ty
  • 值得学习使用 MSBuild 吗? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我只是想知道人们是否认为值得学习使用 MSBuild 语法来自定义 net 项目的构建过程 或者考虑到使用 Visual Studio 构建项目
  • 对 javascript 中的“this”关键字感到困惑

    我已经很长时间没有使用 Javascript 了 今天又重新学习了它 一直让我着迷的一件事是this关键词 我知道在 jQuery 事件处理程序中 例如单击事件 this指的是触发事件的元素 怎么this传递给我作为回调提供的函数 即使我的