【问题标题】:Export a class from a CoffeeScript file从 CoffeeScript 文件中导出一个类
【发布时间】:2022-01-27 05:17:42
【问题描述】:

如果我在一个单独的文件中定义了一个 CoffeeScript 类,我从我的主脚本中调用它,我可以让文件中的函数全局可见,但不让类可见。

包含的文件是:

root = exports ? this

root.add = (a, b) ->

      return a + b

class root.userModel
      username: 'Aaaa'
      name: 'Bbbb'

我可以从我的主代码中访问该函数。如何创建课程?

【问题讨论】:

  • 我在这里尝试了您的代码,访问课程没有问题。如果我调用u = new test.userModel(),那么u 将包含一个对象,正如预期的那样,该对象将是test.userModel 的一个实例(我用于测试的文件是test.coffee 并使用test = require './test' 导入它)跨度>
  • 感谢大家的帮助。问题是由于访问代码主体中的类出现问题

标签: class node.js export coffeescript


【解决方案1】:

假设exports 未定义且thiswindow,您的代码确实会使userModel 成为全局变量。如果您遇到问题,请检查这些条件。

【讨论】:

    【解决方案2】:

    class ... 表单是一个返回值的表达式。因此,您需要将该 class 表达式的结果分配给导出对象的属性。像这样:

    root.userModel = class userModel
      username: 'Aaaa'
      name: 'Bbbb'
    

    更新:

    糟糕,不正确,作为class root.userModelroot.userModel = class userModel 应该可以正常工作。

    【讨论】:

    • 不是这样的,class root.userModel 编译成root.userModel = (function() { function userModel() {... } return userModel; })();
    • 是的,你是对的。反应太快了。无论哪种方式,它都应该可以正常工作。
    • 最好去掉历史/错误信息,像今天写的一样提交答案(修订历史包含旧版本)。并删除所有关于过去修订等的元讨论(这可以放在 cmets 和/或编辑摘要中)。
    【解决方案3】:

    只需在名称前使用“@”来定义您的类:

    class @ClassName
      blablabla: -> blablalblablabla
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-21
      • 1970-01-01
      • 1970-01-01
      • 2021-02-10
      • 1970-01-01
      • 1970-01-01
      • 2019-09-15
      • 1970-01-01
      相关资源
      最近更新 更多