con*_*ile 1 html javascript java gwt jsni
使用GWT JSNI JavaScriptObject和Element作为JSNI方法的参数类型有什么区别?
请考虑以下方法:
native void method(JavaScriptObject inputFile) /*-{
}-*/;
Run Code Online (Sandbox Code Playgroud)
还有这个:
native void method(Element inputFile) /*-{
}-*/;
Run Code Online (Sandbox Code Playgroud)
如果我使用JavaScriptObject或Element,它对内部JSNI函数有什么不同吗?
An Element
是a JavaScriptObject
,但反之则不然,并非所有java脚本对象都是dom元素.
从Java的角度来看,这很重要 - 它确保你不会传递一些没有意义的东西,比如一个Window实例,或者一些json数据,但只传递真正元素的东西.
从JSNI方法中的JavaScript的角度来看,它没有区别,因为JS不理解这些术语中的类型,并且期望传入的任何对象都有正确的方法和字段.
所有其他条件相同,更清楚 - 在有意义的时候使用Element,或至少添加javadocs或将参数命名为clear.如果你指定JSO而不是Element,那么Java,GWT和Javascript都不会关心,但是如果你不小心传入一个非Element并且该方法需要一个元素,你可能会收到一个错误.