2009-08-06 3 views
4

Rhino предоставляет Сценарий и ScriptableObject Вспомогательный класс для реализации объекта javascript, поддерживаемого java-объектом.Как определить статические свойства для Rhino ScriptableObject?

Когда ScriptableObject построен, его методы с именами, начиная с jsFunction___, jsStaticFunction___, jsGet___, jsSet___, jsConstructor автоматически определяются для объектов JavaScript. Таким образом, вы можете определить функции, статические ошибки, свойства экземпляра (его аксессуарами) и конструктор.

Вопрос в том, как определить статические свойства?

По статическим свойствам Я имею в виду свойства на конструкторе, такие как статические методы - методы в конструкторе.

Единственный способ, который я вижу сейчас, - использовать метод finishInit и определить статические свойства вручную. Но каков правильный путь?

ответ

3

В настоящее время у меня есть что-то вроде этого, на мой взгляд:

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

Существуют ли другие способы? И правильно ли это?

ВНИМАНИЕ: Обратите внимание, что конструктор для MyObject еще не определена в объеме, когда finishInit называется. Чтобы определить статические свойства, которые являются экземплярами MyObject, используйте следующий синтаксис:

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); 
    .... 
} 
Смежные вопросы