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