4


1

Rhinoは、javaオブジェクトに裏付けられたjavascriptオブジェクトを実装するための* Scriptable インターフェースと ScriptableObject *ヘルパークラスを提供します。

  • ScriptableObject が構築されると、 jsFunction _ jsStaticFunction _ jsGet _ jsSet _ jsConstructor *で始まる名前のそのメソッドが自動的にjavascriptオブジェクトに対して定義されます。 このようにして、関数、静的関数、インスタンスプロパティ(そのアクセサによる)、およびコンストラクタを定義できます。

問題は、静的プロパティを定義する方法です。

静的プロパティとは、静的メソッドがコンストラクタ上のメソッドであるように、コンストラクタ上のプロパティを意味します。

私が今見ている唯一の方法は* finishInit *メソッドを使い、手動で静的プロパティを定義することです。 しかし、正しい方法は何ですか?

1 Answer


3


現在、私は私の頭の中にこのようなものがあります。

パブリッククラスMyObjectはScriptableObjectを拡張します。

@Override public String getClassName(){return "MyObject"; }

// define static properties
public static void finishInit(スクリプトスコープ、FunctionObjectコントロール、スクリプトプロトタイプ){ctor.defineProperty( "PROP_ONE"、1、READONLY); ctor.defineProperty( "PROP_TWO"、2、READONLY); ctor.defineProperty( "PROP_THREE"、3、READONLY); }

他の方法はありますか? そして、これは正しいですか?

Important
* finishInit *が呼び出されたとき、_MyObject_のコンストラクタはまだスコープ内で定義されていないことに注意してください。 _MyObject_のインスタンスである静的プロパティを定義するには、次の構文を使用します。
public static void finishInit(スクリプト可能スコープ、FunctionObjectコントロール、スクリプト可能プロト){Context cx = Context.getCurrentContext();}スクリプト化可能myObjectInstance = ctor.construct(cx、scope、new Object [] {/ * args * /}); ctor.defineProperty( "PROP"、myObjectInstance、READONLY); …… }