作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
Rhino 提供Scriptable 接口(interface)和ScriptableObject 辅助类来实现由java 对象支持的javascript 对象。
构造ScriptableObject时,其方法名称以jsFunction___、jsStaticFunction___、jsGet___、开头>jsSet___, jsConstructor 是自动为javascript对象定义的。通过这种方式,您可以定义函数、静态函数、实例属性(通过其访问器)和构造函数。
问题是如何定义静态属性?
我所说的静态属性是指构造函数上的属性,就像静态方法是构造函数上的方法一样。
目前我看到的唯一方法是使用finishInit 方法,并手动定义静态属性。但是什么是正确的方法呢?
最佳答案
目前我有这样的想法:
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);
....
}
关于java - 我如何为 Rhino 的 ScriptableObject 定义静态属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1237072/
我是一名优秀的程序员,十分优秀!