gpt4 book ai didi

javascript - Node ES6 : class is not a function

转载 作者:太空宇宙 更新时间:2023-11-04 02:57:24 25 4
gpt4 key购买 nike

我正在尝试找出我的代码中遇到的错误。我编写了一个简单的示例,使用类 a、b 和入口文件 c 复制了该错误。

我的代码哪里出错了?

编辑

许多答案都与我的代码结构有关!我想澄清所需的功能。

  1. a: 需要 b 的静态实例。因此,A需要要求B。

  2. b 的函数(非静态):仅接受 a 实例 的对象。因此,B需要要求A。

具体来说,我有一个“Phrase”类(a)和一个“Parser”类(b)。解析器仅接受短语。 Phrase 在创建时使用其静态解析器实例解析其自身。

a.js

'use strict';

let b = require('./b.js');

class a {
constructor() {

}
}

new b();

module.exports = a;

b.js

'use strict';

let a = require('./a.js');

class b {
constructor() {

}
}

module.exports = b;

c.js

'use strict';

let b = require('./b.js');
new b();

运行: node c.js

错误:

C:\code\a.js:11
new b();
^

TypeError: b is not a function
at Object.<anonymous> (C:\code\projects\elegance\data-frog\tag\datastructures\a.js:11:7)
at Module._compile (module.js:413:34)
at Object.Module._extensions..js (module.js:422:10)
at Module.load (module.js:357:32)
at Function.Module._load (module.js:314:12)
at Module.require (module.js:367:17)
at require (internal/module.js:16:19)
at Object.<anonymous> (C:\code\projects\elegance\data-frog\tag\datastructures\b.js:3:9)
at Module._compile (module.js:413:34)
at Object.Module._extensions..js (module.js:422:10)

最佳答案

您正在从另一个模块内部递归调用每个模块,因此当您在 a 模块中导入 b 时,它尚未准备好。

您不应该在 b 模块中需要 a.js。

如果由于某种原因您需要这样做,请重构您的代码,因为这是一种反模式。

您可以使用需要 a 和 b 的第三个模块,如下所示:

const A = require('a'); //Export the class, not the instance
const B = require('b'); //Export the class, not the instance

var a = new A();
var b = new B();

a.b = b;

这样您还可以确保 a 和 b 是其各自类的实例,或者如果您愿意,您仍然可以使用 instanceof 所需的类。

此外,如果我可以建议,请为您的类使用大写命名。

关于javascript - Node ES6 : class is not a function,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36254875/

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