4

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

构造ScriptableObject时,会自动为 javascript 对象定义名称以jsFunction___jsStaticFunction___jsGet___jsSet___jsConstructor 开头的方法。通过这种方式,您可以定义函数、静态函数、实例属性(通过其访问器)和构造函数。

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

静态属性是指构造函数上的属性,就像静态方法是构造函数上的方法一样。

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

4

1 回答 1

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);
    ....
}
于 2009-08-06T07:38:13.060 回答