javascript - 全局命名空间和 CoffeeScript 循环中的 this

标签 javascript coffeescript

在此代码中:

class MyClass
  myfun: (arg) ->
    for x in arg
      do ->
        ...

循环外部的作用域是 MyClass,而循环内部(它是一个匿名函数)作用域更改为 DOMWindow。

为什么会发生这种情况?我该如何预防?我的主要问题是,如果范围发生变化,我将无法访问 MyClass 类中的其他函数。

谢谢

最佳答案

使用fat arrow将 a 函数绑定(bind)到当前上下文的语法:

class MyClass
  myfun: (arg) ->
    for x in arg
      do =>
        ...

发生这种情况是因为 do 关键字只是在没有任何上下文的情况下调用函数,因此它默认为 window 对象。

do -> ...

相当于

(function() {
    ...
}());

关于javascript - 全局命名空间和 CoffeeScript 循环中的 this,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7165012/

相关文章:

javascript - 尝试使用 SharePoint 列表和 Highcharts 将点放在图表上

javascript - 在多下拉列表中,我如何获取当前删除的值

javascript - 正则表达式在测试时返回组,但在代码中不返回组?

javascript - Node.js 中的解除绑定(bind)事件

syntax - coffeescript try/catch 的简写

javascript - 在 Ember 中使用 ajax 从非 RESTful API 读取 JSON 数据

javascript - 比较美国日期标准 mm/dd/yyyy 中两个日期之间的差异

javascript - 开发一个简单的网页设计器(拖放文本/w 字体和图像)

javascript - ExtJS : handling browser exit event (click on cross-exit)

javascript - 获取触发元素