如何从闭包内部调用实例方法?

2023-12-15

我正在尝试访问 a 中的实例方法map调用,不幸的是我对实例对象的引用被重新定义为 Window.我不确定如何获取我的实例方法:

class Test
  constructor: (@an_array) ->

  f: () ->
    @an_array.map (value) ->
      @a(value)

  a: (value) ->
    alert value

t = new Test [1, 2, 3]
t.f() // TypeError: Object [object Window] has no method 'a'

这是上面代码的功能链接


有多种方法可以解决这个问题。

CoffeeScript 中最常见的是使用粗箭头(=>)产生一个绑定函数:

@an_array.map (value) => @a(value)

Demo: http://jsfiddle.net/ambigously/6BW8q/

标准 JavaScript 方法也可以工作(有时是必要的或更合适的):

  1. 保存参考@这样你就不必关心什么this在回调函数内部:

    _this = @
    @an_array.map (value) -> _this.a(value)
    

    Demo: http://jsfiddle.net/ambiguously/XhP4z/

    我倾向于使用_this代替self由于存在而作为该事物的名称window.self有趣的如果您忘记了会导致的错误var在 JavaScript 中。

  2. 使用手动创建绑定函数Function.bind,但这并没有得到普遍支持:

    @an_array.map ((value) -> @a(value)).bind(@)
    

    Demo: http://jsfiddle.net/ambigously/n2XnC/

  3. 使用 jQuery 的$.proxy, 下划线的_.bind,或其他一些非本机绑定函数实现:

    @an_array.map _((value) -> @a(value)).bind(@)
    

    Demo: http://jsfiddle.net/ambigously/LAy9L/

您选择哪一种取决于您的环境和具体需求:

  1. 如果您尝试绑定来自其他地方的函数,那么您不能使用=>所以你需要使用一些变体(2) or (3)上面(或者可能Function.call or Function.apply).
  2. 如果您同时需要内部和外部this同时你会去(1).
  3. 如果您需要手动绑定函数但不确定本机函数bind存在那么你可能最终会得到(3)以及哪个分支(3)可能取决于您已有的可用库。
  4. ...
  5. Profit.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从闭包内部调用实例方法? 的相关文章

  • phantomjs可以与node.js一起使用吗?

    我想在我的node js 脚本中使用phantomjs 有一个phantomjs 节点 https github com sgentle phantomjs node库 但不幸的是作者使用了这个奇怪的咖啡脚本代码来解释他在做什么 phant
  • Node.js:如何为 prod 和 staging 设置不同的变量

    我正在使用 Express 并且需要为每个服务器 登台和生产 使用不同的凭据 我可以在 server coffee 文件中设置变量 但随后我需要访问不同文件中的这些变量 server coffee app configure product
  • Coffeescript/Javascript 无法在服务器上运行

    我已经实现了 无限滚动 功能 如果有更多帖子要显示 用户可以使用该功能继续向下滚动 我关注了 Railscasts 它在本地运行得很好 javascripts 和 will paginate gem 但是 在服务器上 此功能不起作用 我看到
  • PhantomJS 多个页面的意外加载行为

    我有一个脚本 如下 可以通过 3 个步骤来抓取网站 当设置为一次最多一页时效果很好 然而 当我将其增加到一次 2 个时 事情开始变得不稳定 onFinished 的触发时间比我预期的要早 并且页面尚未完全加载 因此 我的脚本的其余部分被破坏
  • 如何从 Node.js 打开终端应用程序?

    我希望能够打开Vim从终端中运行的node js程序中 创建一些内容 保存并退出Vim 然后抓取文件的内容 我正在尝试做这样的事情 filename tmp tmpfile process pid editor process env ED
  • 在生产环境中使用 CoffeeScript [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • controller.js.coffee 中的函数

    我在使用 CoffeeScript 创建函数时遇到一些问题 我想我错过了一些东西 对于我的用户控制器 我想为注册表单创建客户端验证 我认为我错过了这一切如何运作的一些基本内容 咖啡脚本 资产 users js coffee validate
  • 如何在我的代码中找到 CoffeeScript 1.9.0 重大更改的情况?

    TL DR 是否有任何方法可以识别对 CoffeeScript 的新 1 9 0 行为的违规行为 foo参数命名 现在使用裸露的代码是非法的 并且不会导致警告 错误foo函数中的变量 在CoffeeScript 1 9 0版本中声明 更改了
  • 在 Rails 资产管道的 js.coffee 文件中使用 erb 时出错

    我有以下代码 assets javascripts home js coffee erb jQuery gt addClickListeners gt document on click add chord link addChord do
  • CoffeeScript 智能感知

    我使用 Visual Studio 进行开发 并且非常习惯 Intellisense 但是在编写 CoffeeScript 时 您并没有真正获得任何语法检查或智能感知 VS 有没有插件可以实现这个功能 Thanks AFAIK 您只能使用
  • 如何按顺序运行 Gulp 任务

    在这样的片段中 gulp task coffee gt gulp src src server coffee pipe coffee bare true on error gutil log pipe gulp dest bin gulp
  • 使用 Sinon.js 并阻止调用我的应用程序服务器

    足够简单的问题 我希望我们 sinon js 测试一段 javascript 以确保它调用 ajax方法同时做两件事 我不想真正访问服务器 我想模拟来自服务器的响应 所以这是 JS ajax url tickets id json data
  • Mongoose 对 Promise 拒绝处理

    我有点与 NodeJS 中的 Promise 模式作斗争 我正在数据库中查找用户 然后使用用户引用保存新实体 但是当用户不在数据库中时 我应该返回拒绝 但我不确定如何正确执行 有没有办法做得更好 顺便说一句 对不起 咖啡脚本 User fi
  • Grunt-browserify+mapify+coffeescript = 未通过相对路径找到模块

    我尝试让 grunt browserify 使用 Coffeescript 的相对路径 但当我尝试构建源代码时总是收到错误消息 gt gt Error module src app utils includeMixin not found
  • jQuery Datepicker showAnim 没有动画

    我尝试了多种方法并在互联网上搜索 试图让动画发挥作用 但一无所获 我有日期选择器工作和日期格式选项 但没有动画 我希望使用 剪辑 选项 以下是各个文件中的内容 应用程序 js require jquery require jquery tu
  • 我可以在 render.js 上执行的视图中使用 CoffeeScript 吗?

    我需要做什么才能在 Rails JS 视图中使用 CoffeeScript 例如 def index format js render layout gt false end 我需要做什么才能让 Rails 使用index js coffe
  • node.js http.request 事件流 - 我的 END 事件去了哪里?

    我正在制定一个狡猾的计划 其中涉及使用 node js 作为另一个服务前面的代理服务器 简而言之 将传入请求分派到静态文件 如果存在 否则 将请求分派给另一个服务 我已经掌握了基础知识 但现在尝试使用 Sencha 来完成整个工作Conne
  • Eclipse 的 CoffeeScript 编辑器插件?

    事情是这样的 我使用 Wro4j 来处理 coffee 文件到 js 文件的转译 构建 现在我想要一个支持CoffeeScript的好的编辑器插件 并且我不想安装Aptana 我只需要CoffeeScript 不需要Python Ruby和
  • Coffeescript + 单元测试:全局变量?

    我正在尝试使用 Jasmine 对用 CoffeeScript 编写的小型应用程序进行单元测试 我发现很多资料都说单元测试可以在从 CoffeeScript 编译的 JS 上完美地完成 如果所有内容都包装在匿名函数中以避免污染名称空间 如何
  • jquery-select2 的依赖下拉内容

    我有一个 Rails 4 应用程序 我在其中使用 Jquery select2 作为下拉列表 我有两个下拉菜单 我希望第一个下拉菜单中的选择确实决定了用户可以在第二个下拉菜单中选择的内容 有点像选择一个国家并给出该国家的州列表 在我的应用程

随机推荐

  • C++ 从向量中删除对象[重复]

    这个问题在这里已经有答案了 我想从向量中删除一个元素 例如 object that is in the vector MyClass obj vector looks as so vector
  • R:2个不同包中的2个同名函数

    我需要加载到 R 包 tseries 和 chron 两者都有一个名为 is weekend 的函数 我的环境中始终具有我加载的第二个包中的函数 我如何才能始终访问 chron 的功能 您可能已经注意到加载包的顺序会有所不同 即最后加载的包
  • 线程池程序在速度更快的服务器上运行速度要慢得多

    upd我现在认为我的问题的根源不是 线程 因为我观察到程序的任何一点都变慢了 我认为当使用 2 个处理器时 我的程序执行速度会变慢 可能是因为两个处理器需要彼此 通信 我需要做一些测试 我将尝试禁用其中一个处理器 看看会发生什么 我不确定这
  • 使用 C++11 的 CUDA 6.0 的 CMake 脚本

    我正在为我的 CUDA 6 0 Boost 1 55 0 OpenCV 2 4 9 项目开发 64 位 Mac OSX 10 9 使用 makefile 进行编译 但由于我最终将在 64 位 Windows 8 1 上测试它 我想我 熟悉
  • Delphi中使用SetupDiGetClassDevs进行串口枚举

    我正在尝试枚举 COM 端口的 友好名称 当 USB 串行设备在运行时连接和断开时 端口可能会动态变化 基于中描述的可能方法这个问题 我正在尝试使用 SetupDiGetClassDevs 方法 I found 这个示例代码 但它是为旧版本
  • X.509 安全 Web 服务的 Java 客户端

    我有使用 X 509 证书保护的远程 Web 服务 我生成了 Web 服务客户端内容 使用 jax ws 但需要配置 if 以用于证书的使用 我应该如何进行 我想我应该在本地受信任的密钥库中注册证书 他们设置如下 System setPro
  • 利用浏览器缓存第 3 方 JS

    我已经在我的 httpd conf 上设置了 Expiry ExpiresActive On ExpiresDefault access plus 1 month ExpiresByType image gif access plus 1
  • 使用WITH时语法中出现SQL错误[重复]

    这个问题在这里已经有答案了 我想使用带有WITH 子句的SQL 查询 但出现语法错误 我正在使用 MySQL 版本 5 6 28 这是一个简单的代码示例 WITH alias test AS SELECT id title FROM tip
  • 自定义字体显示在 iOS 模拟器上,但不显示在 Storyboard 上

    我的自定义字体在模拟器上运行时工作正常 但是有什么方法可以在我工作时在故事板本身中查看自定义字体吗 我的文本与默认字体的大小不匹配 所以我有继续编译和运行代码 并通过一遍又一遍的尝试和错误来确定正确的大小 我看到了一些关于此的问题 但它只是
  • 如何读取webhooks发送的数据?

    我有最新的 woocommerce 插件 并且必须为我的 URL 之一设置一个 webhook 但我无法在 REQUEST 中读取它 也无法在 input file get contents php input webhookContent
  • 如何获取当前光标作为Texture2D Unity C#

    我有一个问题 我想获取当前光标 并将其作为Unity中的texture2D获取 当我说当前光标时 我的意思是用户当前拥有的光标 例如 如果用户将光标更改为猫 我希望在 Unity 中拥有相同的猫光标 这就是为什么我不只是在线搜索默认光标的原
  • java.lang.ClassCastException:com.sun.xml.bind.v2.runtime.JAXBContextImpl 无法转换为 com.sun.xml.bind.api.JAXBRIContext

    我创建了一个 jaxws Web 服务 我完全遵循了url 服务非常完美 没有任何错误 但是当请求命中时服务器出现错误 SEVERE caught throwable java lang ClassCastException com sun
  • 如何让子进程在父进程退出后终止?

    假设我有一个进程恰好生成一个子进程 现在 当父进程由于某种原因退出时 正常或异常 通过kill C 断言失败或其他任何原因 我希望子进程终止 如何正确地做到这一点 stackoverflow 上的一些类似问题 之前问过 当父进程退出时 如何
  • 进行文件上传并转到另一个PHP页面

    所以我有 4 页 它们很简单 index php 有效
  • 如何在android 2.1中比较系统日期和mydate?

    在我的 Android 应用程序中 我从数据库中获取日期和时间 但我无法将 日期 格式的日期从数据库获取到我的应用程序中 日期为字符串格式 因此我无法将系统日期与数据库日期进行比较 如果我将系统日期转换为字符串 那么我无法在重复的情况下将日
  • 平滑凹凸不平的圆

    我正在检测圆形物体的边缘并获得 凹凸不平 的不规则边缘 是否可以平滑边缘以使形状更均匀 例如 在下面的代码中 我生成了一个 凹凸不平 的圆圈 左 是否有一种平滑或移动平均函数可以用来获得或近似 平滑 圆 右 最好使用某种参数 我可以控制 因
  • 如何扫描 LAN 网络中的设备

    我想在 LAN 网络中进行扫描以查找链接的设备 我正在 IOS 中为 IPAD 开发一个应用程序 我该怎么做 因为这些是移动设备 所以我假设您想要在无线网络上查找设备 理论上 由于 wifi 使用共享介质进行通信 因此您可以被动侦听流经网络
  • 使用 bash 迭代文件(和目录)名称

    我试图编写一个 bash 脚本来计算本地目录的文件数和目录数 这是我的第一次尝试 bin bash files 0 dir 0 for file in ls do if d file then dir dir 1 else files fi
  • 应用程序必须遵循 iOS 数据存储指南,/documents 中没有任何内容,但仍有一些 kb 发送到 iCloud

    我的应用程序因以下原因被拒绝 您的应用程序未按要求遵循 iOS 数据存储指南 根据应用程序商店审查指南 您的应用程序将 4 0 MB 的数据备份到每个用户的 iCloud 空间 发射 请务必为所有设置 不备份 属性 非由用户生成或修改的数据
  • 如何从闭包内部调用实例方法?

    我正在尝试访问 a 中的实例方法map调用 不幸的是我对实例对象的引用被重新定义为 Window 我不确定如何获取我的实例方法 class Test constructor an array gt f gt an array map val