Ich bin Neuling im Nashorn.Wie kann 'for ... in' mein NativeJavaObject in Rhino aktiviert werden?
Derzeit verwende ich Rhino 1.7R Framework durch .NET 4 und IKVM.NET. Ich legte mehrere umschlossene Klassen offen, die NativeJavaObject mithilfe der API setWrapFractory() implementieren.
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;
}
.....
}
Jetzt kann ich auf alle .NET-Methoden und Eigenschaften zugreifen, wie ich wollte.
Mein aktuelles Problem ist es, 'for ... in' meine NativeJavaObject-Klassen zu unterstützen. Als ich
'for(var prop in myClass){printf(prop);};' ,
bewerten es gibt ‚Nein‚in‘Aufruf zum Nicht-Objekt‘ Fehler.
Es scheint die ‚get‘ versuchen, die Suche ein Objekt von ‚_ Iterator _‘, aber es führte zu ‚nicht gefunden‘ bei get() Funktion. Also, es endet mit Ausnahme. . Bisher habe ich versucht,
- java.util.Iterator hinzugefügt
- Rückkehr this.getIds() GetEnumrator();
Keine der funktioniert.
Wie kann ich Eigenschaft enumrate Zugriff für meine Wrapped NativeJavaObject zulassen? Was ist Rhinos erwarteter Rückgabewert von '_ Iterator _' um 'für ... in' zu aktivieren?
Vielen Dank im Voraus!
Vielen Dank. "__iterator___" suchte nach einer zu verarbeitenden Funktion, nicht nach einem selbst-Objekt. Ich werde es auch mit setLanguageVersion (170) versuchen. Nochmals vielen Dank für die Bereitstellung sehr nützlicher Informationen! –
Ich habe schließlich das NativeJavaObject iteriert, indem ich Iterator-Klasse als 'ScriptableObject' erstellt habe. Jetzt läuft 'for (var a im Dokument) {}' und 'if (' location 'im Fenster) {}'. Danke nochmal! –
@Yone, Gern geschehen. Viel Spaß beim Schreiben. –