Coffeescript 在构造函数中调用类函数是';不被承认 答复:

Coffeescript 在构造函数中调用类函数是';不被承认 答复:,coffeescript,Coffeescript,事实证明,我在创建类实例时忽略了使用new关键字。问题中的代码本身很好 问题: 我有一个相当简单的类,其中构造函数调用该类上的另一个方法(用于节点的编辑器)。调用发生在jQuery each()循环内部,但我也尝试将其移到外部 define ['jquery'], ($) -> class Editor constructor: (@node, @data, @template) -> @node.widgets().each (i, elem) =>

事实证明,我在创建类实例时忽略了使用
new
关键字。问题中的代码本身很好

问题: 我有一个相当简单的类,其中构造函数调用该类上的另一个方法(用于节点的编辑器)。调用发生在jQuery each()循环内部,但我也尝试将其移到外部

define ['jquery'], ($) ->
  class Editor
    constructor: (@node, @data, @template) ->
      @node.widgets().each (i, elem) =>
        data = if @data then @data[i] else null
        node = $(elem)
        @editor_for_node node, data

    editor_for_node: (node, data) ->
      console.log 'hello!'

  return {
    'Editor': Editor,
  }
当调用行
@editor\u for_node,data
时,我得到一个错误(在Firebug中),它说
this.editor\u for_node不是函数

我真的不明白为什么这不能正常工作,我能看到的唯一可能的奇怪来源是我在开始时使用了require.js的define函数

编辑:生成的输出
第一:您使用的是哪个版本的CoffeeScript?在某些以前的版本中,胖箭头一直是bug的来源

如果您使用的是最新版本(1.3.1),那么我将继续说这是一个缩进问题。当我复制并粘贴你的代码时,效果很好。你是在混合制表符和空格吗?验证编译后的输出是否包含该行

Editor.prototype.editor_for_node = ...

更新:查看此答案的评论。问题是调用构造函数时没有使用
new
关键字。

首先:您使用的是哪个版本的CoffeeScript?在某些以前的版本中,胖箭头一直是bug的来源

如果您使用的是最新版本(1.3.1),那么我将继续说这是一个缩进问题。当我复制并粘贴你的代码时,效果很好。你是在混合制表符和空格吗?验证编译后的输出是否包含该行

Editor.prototype.editor_for_node = ...

更新:查看此答案的评论。问题是调用构造函数时没有使用
new
关键字。

Hi Trevor,感谢您的快速回答。我用的是咖啡脚本1.3.1。如果这是一个缩进问题,我会感到惊讶,我来自Python背景,所以我习惯了基于缩进的语法的怪癖。我将把生成的代码添加到问题中。生成的代码看起来不错。现在我想问题在于如何调用构造函数,例如,您是否忘记使用
new
关键字?啊哈!我习惯于不用
new
,以至于我没有发现CoffeeScript需要它。这似乎已经解决了问题。我将更新问题以反映这一点,请随时更新您的答案。谢谢嗨,特雷弗,谢谢你的快速回答。我用的是咖啡脚本1.3.1。如果这是一个缩进问题,我会感到惊讶,我来自Python背景,所以我习惯了基于缩进的语法的怪癖。我将把生成的代码添加到问题中。生成的代码看起来不错。现在我想问题在于如何调用构造函数,例如,您是否忘记使用
new
关键字?啊哈!我习惯于不用
new
,以至于我没有发现CoffeeScript需要它。这似乎已经解决了问题。我将更新问题以反映这一点,请随时更新您的答案。谢谢