我是犀牛的新手。
目前,我通过 .NET 4 和 IKVM.NET 使用 Rhino 1.7R 框架。我使用 setWrapFractory() API 公开了几个实现 NativeJavaObject 的包装类。
public class InterceptNativeObject : NativeJavaObject
{
public InterceptNativeObject()
{
}
public override Object get(String name, Scriptable start)
{
Object res = base.get(name, start);
if (res is NativeJavaMethod)
{
NativeJavaMethod method = (NativeJavaMethod)res;
return new RhinoMethodWrapFunction(method);
}
if (res == org.mozilla.javascript.UniqueTag.NOT_FOUND &&
base.javaObject is IPropertBox && base.javaObject != null)
{
object ret = ((IPropertBox)base.javaObject)._x__GetPropertyValue(name);
return Utils.ConvertCLRValueToJavaValue(ret);
}
return res;
}
.....
}
现在,我可以根据需要访问所有 .NET 方法和属性。
我当前的问题是支持“for...in”我的 NativeJavaObject 类。当我评估
'for(var prop in myClass){printf(prop);};' ,
它返回“no 'in' call for non-object”错误。
似乎“get”试图搜索“ _iterator _ ”的对象,但在 get() 函数中导致“未找到”。因此,它以异常结束。到目前为止,我尝试过
- 添加了 java.util.iterator
- 返回 this.getIds().GetEnumrator();
没有作品。
如何允许对 Wrapped NativeJavaObject 进行属性枚举访问?Rhino启用“for...in”的“ _iterator_ ”预期返回值是多少?
提前致谢!