GWT到Javascript的转换

在JavaScript控制台中,如果我这样做,

   a = [1,2,3]
   Object.prototype.toString.call(a) // gives me "[object Array]"
   typeof a  // gives me "object"

如果我在GWT中创建一个数组列表并将其传递给本地方法并执行此操作,

// JAVA code
   a = new ArrayList<Integer>();
   a.push(1);
   a.push(2);

   //JSNI code
    Object.prototype.toString.call(a) // gives me "[object GWTJavaObject]"
    typeof a // returns "function"

两者之间的区别究竟是什么? GWTJavaObjectArray完全相似吗?

为什么typeof在纯JavaScript中返回“ object ”而在GWT中返回“ function ”?

总结的问题是,GWT对象转换为Javascript的究竟是什么? 完整的代码在这里。

      public void onModuleLoad()
        {
                List<Integer> list = new ArrayList<Integer>();
            list.add( new Integer( 100 ) );
            list.add( new Integer( 200 ) );
            list.add( new Integer( 300 ) );

            Window.alert(nativeMethodCode( list ));
                Window.alert(nativeMethodCode2( list ));
        }

        public static final native Object nativeMethodCode( Object item )
        /*-{
            return Object.prototype.toString.call(item);
        }-*/;

        public static final native Object nativeMethodCode2( Object item )
        /*-{
            return typeof item;
        }-*/;

GWT中的ArrayList不会被转换为纯JS数组:它是一个扩展AbstractList并实现一堆接口的类,在翻译成JS时应该保留这些信息,以便instanceof检查(在Java代码中;例如instanceof Listinstanceof RandomAccess )仍然按预期工作。 ArrayList因此被实现为JS数组的封装器,请参阅https://code.google.com/p/google-web-toolkit/source/browse/tags/2.5.0/user/super/com/google/ GWT / EMUL / JAVA / UTIL / ArrayList.java。

请注意,Java数组被转换为JS数组,但要非常小心您在JSNI中对它做了什么,因为您可能会进一步破坏Java假设(例如数组的大小固定)。

链接地址: http://www.djcxy.com/p/11715.html

上一篇: GWT to Javascript conversion

下一篇: Unity3D on iOS, inspecting the device camera image in Obj