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
最后,问题是exports
是exports
的一个对象 。 看这里:
exports.Mic = Mic
您已将Mic
分配给exports
对象的Mic
键,因此现在在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
-
只需从
require
模块中取出Mic
:{Mic} = require './Mic' # equivalent to saying Mic = require('./Mic').Mic m = new Mic 3