Fai*_*bid 6 node.js coffeescript
我在尝试让我的班级在我的node.js文件中工作时遇到了麻烦.当我需要我写的模块时,require'./module'调用我的构造函数并给出错误.但实际上我想稍后在文件中实例化.
即
class Mic
constructor: (x) ->
@t = []
@t.push x
exports.Mic = Mic
Run Code Online (Sandbox Code Playgroud)
这是我的app.coffee文件
require 'coffee-script'
require './Mic'
Run Code Online (Sandbox Code Playgroud)
当我运行app.coffee时,它会给出一个异常ReferenceError:x未定义.这是有意义的,因为它调用构造函数,但为什么它调用构造函数,即使我没有调用新的Mic?
编辑 修复缩进后
class Mic
constructor: (x) ->
@t = []
@t.push x
exports.Mic = Mic
Run Code Online (Sandbox Code Playgroud)
并将我的app.coffee更新为
Mic = require './Mic'
m = new Mic 3
console.log m
Run Code Online (Sandbox Code Playgroud)
我收到了错误
TypeError: object is not a function
at Object.CALL_NON_FUNCTION_AS_CONSTRUCTOR (native)
Run Code Online (Sandbox Code Playgroud)
Ash*_*she 17
第一件事是第一件事:你不需要 - require 'coffee-script'运行就coffee足够了; 与运行编译的JavaScript相同.您不需要在程序中运行时提供CoffeeScript库.
其次,第一个文件缩进不正确; 如果你想要它是Mic构造函数,在它下面缩进一级class,即:
class Mic
constructor: (x) ->
@t = []
@t.push x
exports.Mic = Mic
Run Code Online (Sandbox Code Playgroud)
最后,问题是出口exports的对象.看这里:
exports.Mic = Mic
Run Code Online (Sandbox Code Playgroud)
你已经分配Mic了exports对象的Mic密钥,所以现在exportsMic.coffee看起来像这样:
{ Mic: ...your class... }
Run Code Online (Sandbox Code Playgroud)
当你说require './Mic',你得到了那个对象; 换一种说法:
require('./Mic') == { Mic: ...your class... }
Run Code Online (Sandbox Code Playgroud)
因此,您需要执行以下操作之一:
导出Mic为Mic.coffee的整个导出,而不是关键:
module.exports = Mic
Run Code Online (Sandbox Code Playgroud)获取整个模块,然后实例化该Mic对象:
mic = require './Mic'
m = new mic.Mic 3
Run Code Online (Sandbox Code Playgroud)就拿Mic从了require"d模块:
{Mic} = require './Mic' # equivalent to saying Mic = require('./Mic').Mic
m = new Mic 3
Run Code Online (Sandbox Code Playgroud)| 归档时间: |
|
| 查看次数: |
3206 次 |
| 最近记录: |