2009-08-06 4 views
4

Rhino bietet Scriptable Schnittstelle und ScriptableObject Hilfsklasse ein Javascript-Objekt von einem Java-Objekt unterstützt zu implementieren.Wie kann ich statische Eigenschaften für Rhinos ScriptableObject definieren?

Wenn Scriptableobject aufgebaut ist, die Methoden mit Namen beginnend mit jsFunction___, jsStaticFunction___, jsGet___, jsSet___, jsConstructor werden für das JavaScript-Objekt automatisch definiert. Auf diese Weise können Sie Funktionen, statische Funktionen, Instanzeigenschaften (durch ihre Accessoren) und Konstruktor definieren.

Die Frage ist, wie man statische Eigenschaften definiert?

Mit statischen Eigenschaften meine ich Eigenschaften auf den Konstruktor, wie statische Methoden sind Methoden auf dem Konstruktor.

Die einzige Möglichkeit, die ich jetzt sehe, ist finishInit Methode, und statische Eigenschaften manuell definieren. Aber was ist der richtige Weg?

Antwort

3

Zur Zeit habe ich so etwas wie dies in meinem Kopf:

public class MyObject extends ScriptableObject { 

@Override 
public String getClassName() { 
    return "MyObject"; 
} 

// define static properties 
public static void finishInit(Scriptable scope, FunctionObject ctor, Scriptable proto) { 
    ctor.defineProperty("PROP_ONE", 1, READONLY); 
    ctor.defineProperty("PROP_TWO", 2, READONLY); 
    ctor.defineProperty("PROP_THREE", 3, READONLY); 
} 

Gibt es andere Möglichkeiten? Und ist dieser Weg richtig?

Wichtig: Beachten Sie, dass Konstruktor für MyObject ist noch nicht in ihrem Umfang definiert, wenn finishInit genannt wird. Verwenden Sie die folgende Syntax, um statische Eigenschaften zu definieren, die Instanzen von MyObject sind:

public static void finishInit(Scriptable scope, FunctionObject ctor, Scriptable proto) { 
    Context cx = Context.getCurrentContext(); 
    Scriptable myObjectInstance = ctor.construct(cx, scope, new Object[] { /* args */ }); 
    ctor.defineProperty("PROP", myObjectInstance, READONLY); 
    .... 
} 
Verwandte Themen