javascript setTimeout 调用错误

2024-02-26

我想调用window.setTimeot https://developer.mozilla.org/en/DOM/window.setTimeout功能与我的自定义范围,所以我使用call https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function/Call方法,但是有问题。

function foo() {
    this.bar = function() {
        console.log("keep going");
        window.setTimeout.call(this,this.bar,100);
    }
    this.bar();
}

new foo;

在 Firefox 下,这只会向控制台打印 1 行,然后什么也没有,而在 google chrome 下,它会抛出一个TypeError https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/TypeError.

我的代码有什么问题?


Using call在这里没有帮助:它调用setTimeout和你的this对象,但回调函数本身仍然是从全局范围调用的。你真正想做的是这样的:

function foo() {
    var self = this;
    this.bar = function() {
        console.log("keep going");
        window.setTimeout(function() { self.bar(); }, 100);
    }
    this.bar();
}

Edit:如果你真的想要类似的东西call方法,你可以使用bind https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function/bind这绑定了this函数的值:

window.setTimeout(this.bar.bind(this), 100);

然而,这是新的 ECMAScript 5 规范的一部分,尚未得到所有浏览器的支持。

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

javascript setTimeout 调用错误 的相关文章

随机推荐

  • XPath - 提取两个节点之间的文本

    我的 XPath 查询遇到问题 我必须解析一个 div 它被划分为未知数量的 部分 其中每一个都由 h5 和部分名称分隔 可能的部分标题列表是已知的 并且每个标题只能出现一次 此外 每个部分可以包含一些 br 标签 所以 假设我想提取 Se
  • 尽管在 Windows 的 VS Code 中安装了字体并激活了连字,但仍无法显示 FiraCode

    在我的设置中我有 editor fontLigatures true editor fontFamily Fira Code Comic Sans MS Tahoma Consolas 我已经尝试过 根据this https github
  • 在 IIS7 中重写映射 — 如何使匹配项选择性地包含尾部斜杠?

    我已经阅读了几种组合的前 30 名 Google 搜索结果IIS rewrite map condition等等 但我在 microsoft com 网站或其他地方找不到任何像样的文档 我在 IIS7 中有一堆重写映射 我想处理它们 无论它
  • svn:ignore 的模式匹配字符

    在网上回应一个问题 svn ignore 模式的语法 记录在某处 唯一的图案 我可以在中找到匹配的字符 svn ignore 下的 SVN 书是 颠覆书 svn ignore http svnbook red bean com en 1 0
  • 使用php验证数字签名

    我有一封经过数字签名的电子邮件 email BEGIN PGP SIGNED MESSAGE Hash SHA1 The below email has been digitally signed for test purposes We
  • 从 PostgreSQL 检索原始通知文本

    我正在使用 PL pgSQL 尝试模拟我在 Oracle PL SQL 中可以执行的操作 其中 dbms output 相当于 stdout 我读过 RAISE NOTICE 可能是处理此问题的最佳方法 然而我的问题是 当我从 psycop
  • 可以从自定义模型绑定器访问数据库吗?

    假设我有一个对象 它从 HttpPost 获取一些数据 从数据库获取一些数据 我想我想允许 ModelBinder 访问数据库 存储库以获取帖子中丢失的数据 实际上 这是一个好主意还是坏主意 鉴于自 2010 年初以来我对这类事情的思考已经
  • Swift 5.4 十六进制转 NSColor

    我正在为 macOS 开发一个程序 我需要将十六进制颜色转换为 NSColor 我在这里查看了建议的解决方案 将十六进制颜色代码转换为 NSColor https stackoverflow com questions 8697205 co
  • EPPlus 中的隐藏列不起作用

    我想使用 EPPlus nuget 包隐藏 excel 中的一列 但它不起作用 它没有隐藏该列 这就是我发现应该能解决问题的方法 也许有一个错误 worksheet Column 1 Hidden true 我使用的是4 5 2 1版本 项
  • 以编程方式创建 XPath 表达式

    是否可以从网页上光标的位置自动生成最具体的 XPath 表达式 XPath 表达式将随着 onMouseMove 事件 而改变 如果可以的话 你会如何实施 或者它已经在某些地方实施了Javascript or Python图书馆 我更喜欢它
  • 不带空格的字符串长度 (C#)

    快点小问题 我需要计算字符串的长度 但不包括其中的空格 例如 对于像 I am Bob 这样的字符串 string Length将返回 8 6 个字母 2 个空格 我需要一种方法或其他东西来给我字母的长度 或数量 在 我是鲍勃 的情况下为
  • 文本中的句子注释不带标点符号

    我很难让 CoreNLP 系统正确找到诗歌语料库中一个句子的结束位置和另一个句子的开始位置 其陷入困境的原因 有些诗在整个长度上都没有标点符号 有时甚至没有大小写 有些诗的句子从一个段落延伸到另一个段落 有些诗每行开头都大写 这是一个特别棘
  • 我的 FreeMarker 方法返回一个带有 ${variable} 的字符串——如何强制 FreeMarker 解析它?

    我创建了一个类来实现模板方法模型Ex来自 FreeMarker 假装exec 函数返回一个字符串 你好 用户名 我将该类分配给数据模型中的一个方法 dataModel put myMethod myClassInstance dataMod
  • 如何从浏览器上传文件(附件)?

    我无法上传附件以使浏览器正常工作 一些提示是here http japhr blogspot de 2010 02 how to upload files in couchapp html 其他的there http comments gm
  • ResultSet.TYPE_SCROLL_SENSITIVE 的行为

    我对 a 的行为感到困惑ResultSet这是类型TYPE SCROLL SENSITIVE 我对此的理解是 我执行一个选择查询 返回一个结果集 我打印出第一行中特定列的值 然后我执行Thread sleep 10000 这会使程序暂停 1
  • 在实体框架 6 中保存分离的实体

    我读过很多关于在实体框架中保存分离实体的帖子 所有这些似乎都适用于旧版本的实体框架 它们引用了诸如ApplyCurrentValues和ChangeObjectState之类的方法 但这些方法似乎并不存在 一时兴起 我决定尝试一种通过智能感
  • VS2008到VS2010项目转换

    我有一个在 VS2008 中构建的组件项目 目标是 NET Framework 3 5 我最近下载了 VS2010 Beta 1 以确保在切换到新 IDE 时该项目能够正确转换 该项目包含对几个针对该框架 2 0 版本构建的第三方 dll
  • 使用 URL 时找不到 Webpack 2 模块

    我刚刚更新了我的 Angular 2 项目以使用 Webpack 2 它运行得很好 然而 我在使用时遇到了一个新问题resolve alias key 当我使用 webpack 1 时 这段代码工作得很好 webpack config js
  • 我如何将 C++ 对象传递给具有不同 _ITERATOR_DEBUG_LEVEL 的 DLL

    我的可执行文件调用了许多我自己编写的 DLL 根据这些 DLL 使用的第 3 方 C 库 我无法自由选择所有 DLL 的编译器设置 因此在一些DLL中 ITERATOR DEBUG LEVEL设置为 2 调试版本中的默认值 但在我的可执行文
  • javascript setTimeout 调用错误

    我想调用window setTimeot https developer mozilla org en DOM window setTimeout功能与我的自定义范围 所以我使用call https developer mozilla or