【问题标题】:Node coffeescript class files and inheritance节点咖啡脚本类文件和继承
【发布时间】:2012-02-27 13:05:58
【问题描述】:

我有 2 个类文件:

foo.coffee:class Foo

bar.coffee:class Bar extends Foo

如何定义这些类以使它们在全球范围内可用?我在Bar 中收到了Foo 未定义的错误。

我有一个 index.js 文件,我调用了 node 来运行脚本。这是 index.js 的内容,我很可能也做错了:

exports.Foo = require("./foo")
exports.Bar = require("/bar")

【问题讨论】:

    标签: node.js inheritance coffeescript


    【解决方案1】:

    foo.coffee:

    class Foo
      // ...
    
    module.exports = Foo
    

    bar.coffee:

    Foo = require "./foo"
    
    class Bar extends Foo
      // ...
    
    module.exports = Bar
    

    index.coffee:

    exports.Foo = require "./foo"
    exports.Bar = require "./bar"
    

    更新:您还需要使用coffee 运行.coffee 文件,除非您先编译它们。

    更新 2: 如何构建模型取决于您自己。我喜欢上面的模式(简单的模块只导出一个函数——这时你需要分配给module.exports,因为你不能简单地分配给exports),但其他人更喜欢这样的结构:

    foo.coffee:

    class Foo
      // ...
    
    exports.Foo = Foo
    

    bar.coffee:

    Foo = require("./foo").Foo
    
    class Bar extends Foo
      // ...
    
    exports.Bar = Bar
    

    index.coffee:

    exports.Foo = require("./foo").Foo
    exports.Bar = require("./bar").Bar
    

    每个模块导出一个具有一个或多个属性的对象。

    【讨论】:

    • 我想插话说我同意 Linus 以及模块应该如何只导出类。当然,也有一些例外,但总的来说这是一种很好的做法。
    • (为 OT 道歉!)——@Linus:你能推荐一种在客户端使用相同技术的方法吗? RequireJS(似乎喜欢很多开销)?
    • @polarblau:当然,我使用stitch,这对我来说效果很好。小巧轻便,在客户端为您提供require
    【解决方案2】:

    你也可以写:

    class @MyClass
      [...]
    
    {MyClassName} = require './myclassFile'
    myClass = new MyClassName
    

    【讨论】:

      猜你喜欢
      • 2013-06-28
      • 2011-11-04
      • 2013-01-09
      • 1970-01-01
      • 1970-01-01
      • 2012-07-26
      • 1970-01-01
      • 2015-10-23
      • 2014-08-25
      相关资源
      最近更新 更多