你能用Javascript做像C++;?目标是解决相互依赖关系

你能用Javascript做像C++;?目标是解决相互依赖关系,javascript,requirejs,Javascript,Requirejs,我们不断遇到循环依赖。我们使用requirejs来管理我们的模块。我们刚刚开始使用webpack,这可能会有所帮助 我从C++世界移到JavaScript。在C++世界中,如果对象A依赖于对象B,而对象B依赖于对象A,则我们将引用Seor对象,但不将其合并。 class A { B* b; // This indicates that b is a reference to, not a copy of, B. } class B { A* a; } 如果我们说了下面的话,

我们不断遇到循环依赖。我们使用requirejs来管理我们的模块。我们刚刚开始使用webpack,这可能会有所帮助

我从C++世界移到JavaScript。在C++世界中,如果对象A依赖于对象B,而对象B依赖于对象A,则我们将引用Seor对象,但不将其合并。
class A {
    B* b;  // This indicates that b is a reference to, not a copy of, B.
}

class B {
    A* a;
}
如果我们说了下面的话,我们的编译(链接?)将立即停止,因为在我们试图将B合并到A中时,B没有被定义为完成

class A { 
    B a;
}

class B {
    A a;
}
有没有办法用Javascript做同样的事情?引用对象的调用协议,而不引用其实现



下面是相同问题的Javascript版本

// A.js:
define(['B'], function(B) { ... });

// B.js
define(['A'], function(A) { ... }); 
这是失败的

但如果能够做到这一点,这将是可行的:

// A.js
define(['refB'], function(refB) { ... }); 

// B.js
define(['refA'], function(refA) { ... }); 

refB是一个不是B的对象,但可以用来调用B中的函数/访问B中的数据。

ES6之前的Javascript只是松散地具有“类”的概念。没有这样的静态链接会限制您这样做。Javascript也是鸭型的,所以你不会提到
A
B
它们都只是对象——如果它们恰巧像
A
一样嘎嘎作响,那么它就是一个
A
。Javascript中没有接口实现,但也许你可以看看Mixin这里有一个相同问题的Javascript版本。在A.js中:定义(['B'],函数(B){…});在B.js中:定义(['A'],函数(A){…});这是失败的。但如果可以的话,这将是可行的:在A.js中:define(['refB'],function(refB){…});在B.js中:定义(['refA'],函数(refA){…});refB是一个不是B的对象,但您可以使用它来调用B中的函数/访问B中的数据。对此很抱歉。请用更多的代码编辑问题,阅读注释中的代码是不可能的。ES6之前的Javascript只是松散地有“类”的概念。没有这样的静态链接会限制您这样做。Javascript也是鸭型的,所以你不会提到
A
B
它们都只是对象——如果它们恰巧像
A
一样嘎嘎作响,那么它就是一个
A
。Javascript中没有接口实现,但也许你可以看看Mixin这里有一个相同问题的Javascript版本。在A.js中:定义(['B'],函数(B){…});在B.js中:定义(['A'],函数(A){…});这是失败的。但如果可以的话,这将是可行的:在A.js中:define(['refB'],function(refB){…});在B.js中:定义(['refA'],函数(refA){…});refB是一个不是B的对象,但您可以使用它来调用B中的函数/访问B中的数据。很抱歉。请用更多代码编辑问题,阅读注释中的代码是不可能的。