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

标签 java javascript rhino

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/

相关文章:

java - 点击按钮后Wicket添加方法

javascript - 如何创建具有百分比高度的固定、可滚动的 div?

java - 脚本 java : import a class from an external file

java - Mojo 执行异常 : Maven with Android

java - 如何创建带有执行选项的 Jar 文件?

javascript - 为 JavaScript 代码创建循环

javascript - HTML JS Canvas 游戏 : Tile Collision Bug Makes Player Teleport Up

javascript - Android、Javascript、Rhino、JSON

java - 用javascript语言编译JasperReport时出现异常

java - maven-javadoc-plugin 中断 mvn 版本 :perform