首页 > 解决方案 > node.js 中的相互依赖包含导致空对象

问题描述

我有两个文件声明一个类,它们都有static函数:

foo.js:

const bar = require('./bar');

console.log('bar in foo: ');
console.log(bar);

class foo {
  static _(test) {
    return 'foo_' + test + bar._(test);
  }

  static bar() {
    return 'bar';
  }
}

module.exports = foo;

bar.js:

const foo = require('./foo');

console.log('foo in bar:');
console.log(foo);

class bar {
  static _(test) {
    return foo.bar(test);
  }
}

module.exports = bar;

在 VS Code 中,代码完成在两个文件中工作以获取另一个文件的静态方法。

但是当我尝试执行它时:

const foo = require('./foo');
foo._('test');

我可以看到递归require不像我想象的那样工作:

foo in bar:
{}
bar in foo:
[Function: bar]
bar.js:8
        return foo.bar(test);
                   ^

TypeError: foo.bar is not a function

我知道class在 JS 中是围绕函数的语法糖,但我仍然对解释器失去static成员感到惊讶。

在这种情况下,任何人都可以解释 require 的工作原理吗?为什么它会导致一个空对象?

标签: javascriptnode.jsinclude

解决方案


推荐阅读