【问题标题】:How can I define static properties for Rhino's ScriptableObject?如何为 Rhino 的 ScriptableObject 定义静态属性?
【发布时间】:2010-11-17 05:57:55
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: java javascript rhino


    【解决方案1】:

    目前我有这样的想法:

    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);
        ....
    }
    

    【讨论】:

      猜你喜欢
      • 2011-02-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多