Coffeescript和node.js混淆。 需要实例化类?

我在尝试让我的课程在我的node.js文件中工作时遇到问题。 当我需要我写的模块时,require'./module'调用我的构造函数并给出一个错误。 但我实际上想在文件中稍后实例化。

class Mic constructor: (x) -> @t = [] @t.push x exports.Mic = Mic 

这里是我的app.coffee文件

 require 'coffee-script' require './Mic' 

当我运行app.coffee时,它会给出一个exceptionReferenceError:x没有被定义。 这是有道理的,因为它调用的构造函数,但为什么它调用构造函数,即使我没有叫新的麦克风?

编辑修改缩进之后

 class Mic constructor: (x) -> @t = [] @t.push x exports.Mic = Mic 

并更新我的app.coffee到

 Mic = require './Mic' m = new Mic 3 console.log m 

我得到错误

 TypeError: object is not a function at Object.CALL_NON_FUNCTION_AS_CONSTRUCTOR (native) 

第一件事是第一件事:你require 'coffee-script' – 用coffee就足够了; 与运行编译的JavaScript相同。 您的程序不需要运行时可用的CoffeeScript库。

其次,第一个文件出现不正确的缩进; 如果你想要成为Mic的构造函数,请将它缩进class下一层,即:

 class Mic constructor: (x) -> @t = [] @t.push x exports.Mic = Mic 

最后,问题是exportsexports的一个对象 。 看这里:

 exports.Mic = Mic 

您已将Mic分配给exports对象的Mic键,因此现在在Mic.coffee中导出如下所示:

 { Mic: ...your class... } 

当你说require './Mic' ,你会得到这个对象。 换一种说法:

 require('./Mic') == { Mic: ...your class... } 

所以你需要做以下的一个:

  1. 导出Mic作为Mic.coffee的整个出口,而不是作为关键:

     module.exports = Mic 
  2. 把整个模块拿出来,然后在下面的Mic对象:

     mic = require './Mic' m = new mic.Mic 3 
  3. 只需从require模块中取出Mic

     {Mic} = require './Mic' # equivalent to saying Mic = require('./Mic').Mic m = new Mic 3