一方面,你是对的——问题不能由单独的线程触发,因为 JavaScript 是单线程的。
回调事件肯定会由在当前事件处理程序(构造当前对象的事件处理程序)完成后启动的事件处理程序处理。所以他们只会看到完全构造的对象。
另一方面,您通常不需要线程来利用基本问题。这是一个简单的例子:
final A a = new A();
final B b = new B(a);
public class A {
private B b;
public void setB(final B b) {
this.b = b;
}
public void letBSaySomething() {
b.saySomething();
}
}
public class B {
private A a;
private final int some;
public B(final A a) {
this.a = a;
a.setB(this);
a.letBSaySomething();
some = 55;
a.letBSaySomething();
}
public void saySomething() {
RootPanel.get().add(new Label("Hello " + some));
}
}
这导致输出
Hello 0
Hello 55
(虽然“一些”是最终的)。这在 GWT(已编译/未编译)和纯 Java 程序中都会发生。