Rhino提供 Scriptable 接口和 ScriptableObject 帮助程序类来实现由java对象支持的javascript对象。
构建 ScriptableObject 时,其名称以 jsFunction ___ , jsStaticFunction ___ , jsGet ___ , jsSet ___ , jsConstructor 。这样您就可以定义函数,静态函数,实例属性(通过其访问器)和构造函数。
问题是如何定义静态属性?
静态属性我的意思是构造函数的属性,就像静态方法一样,是构造函数的方法。
我现在看到的唯一方法是使用 finishInit 方法,并手动定义静态属性。但是正确的方法是什么?
答案 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);
....
}