我有麻烦试图让我的一流的工作在我的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)
第一件事,是第一条:您不需要require 'coffee-script'
与-运行它coffee
就够了; 与运行编译的JavaScript。 你不需要在你的程序在运行时可用的CoffeeScript的库。
其次,在第一文件中出现不正确地缩进; 如果你想要的是Mic
的构造函数,缩进它的下面一级class
,即:
class Mic
constructor: (x) ->
@t = []
@t.push x
exports.Mic = Mic
最后,问题是, exports
是出口的对象 。 看这里:
exports.Mic = Mic
您分配Mic
的exports
对象的Mic
键,所以现在exports
在Mic.coffee看起来是这样的:
{ Mic: ...your class... }
当你说require './Mic'
,你得到的是对象返回; 换一种说法:
require('./Mic') == { Mic: ...your class... }
所以,你需要做以下之一:
出口Mic
作为Mic.coffee的整个出口,而不是作为一个重点:
module.exports = Mic
获取整个模块出来,然后实例化Mic
中的对象:
mic = require './Mic' m = new mic.Mic 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?