4 Stimmen

Wie kann ich statische Eigenschaften für das ScriptableObject von Rhino definieren?

Rhino bietet eine Scriptable-Schnittstelle und die ScriptableObject-Hilfsklasse, um ein JavaScript-Objekt zu implementieren, das von einem Java-Objekt unterstützt wird.

Wenn ein ScriptableObject konstruiert wird, werden seine Methoden mit Namen, die mit jsFunction___, jsStaticFunction___, jsGet___, jsSet___, jsConstructor beginnen, automatisch für das JavaScript-Objekt definiert. Auf diese Weise können Sie Funktionen, statische Funktionen, Instanzeigenschaften (durch ihre Zugriffsmethoden) und Konstruktoren definieren.

Die Frage ist, wie man statische Eigenschaften definiert?

Mit statischen Eigenschaften meine ich Eigenschaften am Konstruktor, genauso wie statische Methoden Methoden am Konstruktor sind.

Derzeit sehe ich nur die Möglichkeit, die Methode finishInit zu nutzen und statische Eigenschaften manuell zu definieren. Aber was ist der richtige Weg?

3voto

vsg Punkte 51

Derzeit habe ich so etwas im Sinn:

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 korrekt?

WICHTIG: Beachten Sie, dass der Konstruktor für MyObject noch nicht im Scope definiert ist, wenn finishInit aufgerufen wird. Um statische Eigenschaften zu definieren, die Instanzen von MyObject sind, verwenden Sie die folgende Syntax:

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);
    ....
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X