CoffeeScript的和Node.js的混乱。 需要实例化类?(Coffeescript a

2019-09-17 13:24发布

我有麻烦试图让我的一流的工作在我的node.js文件。 当我要求我写的模块时,需要“./module”叫我的构造函数,并给出了一个错误。 但其实我是想在文件中实例化以后。

class Mic

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

exports.Mic = Mic

这里是我app.coffee文件

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

当我运行app.coffee它给出了一个例外的ReferenceError: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)

Answer 1:

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

其次,在第一文件中出现不正确地缩进; 如果你想要的是Mic的构造函数,缩进它的下面一级class ,即:

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

exports.Mic = Mic

最后,问题是, exports是出口的对象 。 看这里:

exports.Mic = Mic

您分配Micexports对象的Mic键,所以现在exports在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. 就拿Mic从出require “d模块:

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


文章来源: Coffeescript and node.js confusion. require instantiates class?