8

我知道以下在 GWT 中是相同的:

Window and $wnd
Document and $doc

除了第一个用在Java中,第二个用在JSNI(JavaScript)之外,还有什么区别吗?

4

1 回答 1

16

Window是一个包含大量静态方法的类,您可以使用它来获取或设置浏览器窗口的某些属性,但实际上它不是本机浏览器窗口对象。这些方法实现最终JSNI是使用$wnd变量设置/获取这些属性的块。就像Window.alert()谁的实现将是$wnd.alert(). 请注意,Window.java它无法访问浏览器窗口对象中的所有内容,例如window.console等。

GWT 使用$wnd而不是window因为编译的代码在 iframe 中正常执行,并且在这种情况下,window将引用 iframe 窗口,而$wnd将引用父窗口。iframe$doc中对父文档的引用也是如此。

另一边Document是一个扩展的java类JavaScriptObject,这意味着它是一个Overlay类型,这基本上意味着它是一个原生javascript对象的特殊包装器,它不修改底层JavaScript而是添加一组java方法来交互用它。传递给 jsni 时可以安全地进行转换。

综上所述,虽然Document$doc在java世界中不一样,但是编译的时候是一样的,否则Window就不是一个覆盖$wnd,只是访问浏览器窗口某些方法的一种方式。

尽管 GWT 编译代码委托给原生 js 对象和方法,但不要试图在 js 和 java 对象之间寻找相似之处。GWT 设计了一个 API 来使用一组 java 对象、小部件、模式等来开发 ajax 应用程序。一些对象和方法的命名方式相同,但几乎 API 是不同的。不过,还有其他将 java 编译为 javascript 的项目,它们在两个世界之间具有严格的并行性,例如ST-JS,并且 GWT 提供了一个名为Elemental的实验性库,其 API 几乎与 javascript 相同(它仅适用于 Chrome)。

于 2013-10-19T22:17:17.707 回答