我知道以下是GWT中的某种相同内容:
Window and $wnd
Document and $doc
除了第一个用于Java而第二个用于JSNI(JavaScript)之外,是否有任何差异?
答案 0 :(得分:11)
Window
是一个类的大量静态方法,您可以使用它来获取或设置浏览器窗口的某些属性,但实际上它不是本机浏览器窗口对象。这些方法实现最终是JSNI
块,它们使用$wnd
变量来设置/获取这些属性。与Window.alert()
类似,其实现方式为$wnd.alert()
。请注意,Window.java
无法访问浏览器窗口对象中的所有内容,例如window.console
等。
GWT使用$wnd
代替window
,因为已编译的代码通常在iframe中执行,在此上下文中,window
将引用iframe窗口,$wnd
将引用父窗口。 $doc
也是如此,它是iframe到父文档的引用。
另一方面Document
是一个扩展JavaScriptObject
的java类,这意味着它是Overlay类型,这基本上意味着它是本机javascript对象的特殊包装器,它不会修改底层JavaScript,但添加了一组与之交互的java方法。传递给jsni时可以安全地施放。
总之,尽管Document
和$doc
在java世界中并不相同,但在编译时它们将是相同的,否则Window
它不是{{1}的重叠它只是一种访问浏览器窗口的某些方法的方法。
虽然GWT编译代码委托给本机js对象和方法,但是不要试图找到js和java对象之间的相似之处。 GWT设计了一个API来使用一组java对象,小部件,模式等来开发ajax应用程序。一些对象和方法以相同的方式命名,但几乎API都不同。但是,其他项目将java编译为javascript,它在ST-JS这两个世界之间具有严格的并行性,而GWT提供了一个名为Elemental的实验库,其API几乎与javascript相同(它仅适用于javascript)铬)。