如何为Rhino的ScriptableObject定义静态属性?

时间:2009-08-06 05:07:24

标签: java javascript rhino

Rhino提供 Scriptable 接口和 ScriptableObject 帮助程序类来实现由java对象支持的javascript对象。

构建 ScriptableObject 时,其名称以 jsFunction ___ jsStaticFunction ___ jsGet ___ jsSet ___ , jsConstructor 。这样您就可以定义函数,静态函数,实例属性(通过其访问器)和构造函数。

问题是如何定义静态属性?

静态属性我的意思是构造函数的属性,就像静态方法一样,是构造函数的方法。

我现在看到的唯一方法是使用 finishInit 方法,并手动定义静态属性。但是正确的方法是什么?

1 个答案:

答案 0 :(得分: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);
}

还有其他方法吗?这样做是否正确?

重要提示:请注意,当调用 finishInit 时, MyObject 的构造函数尚未在范围内定义。要定义静态属性( 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);
    ....
}