gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 22:26:49 25 4
gpt4 key购买 nike

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

class Mic

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

exports.Mic = Mic

这是我的 app.coffee 文件

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

当我运行 app.coffee 时,它​​给出了一个异常 ReferenceError: x is not defined。这是有道理的,因为它调用了构造函数,但为什么即使我没有调用 new Mic ,它也会调用构造函数?

编辑修复缩进后

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... }

因此您需要执行以下操作之一:

  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

关于node.js - Coffeescript 和 node.js 混淆。需要实例化类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10772102/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com