3

RhinoでホストオブジェクトをJavaScriptに返す最良の方法は何ですか?私はこのような2つのクラスを持っています:

public class Hosted extends org.mozilla.javascript.ScriptableObject {
    private static final long serialVersionUID = 1;
    public Hosted() {}
    public void jsConstructor() {}

    public String getClassName() {
        return "Hosted";
    }

    public Member jsGet_member() {
        Member m = new Member();
        m.defineFunctionProperties(new String[] { "toString" }, m.getClass(), DONTENUM);
        return m;
    }
}

public class Member extends org.mozilla.javascript.ScriptableObject {
    private static final long serialVersionUID = 2;
    public Member() {}
    public void jsConstructor() {}

    public String getClassName() {
        return "Member";
    }

    public String toString() {
        return "called toString()";
    }
}

toStringメソッドを呼び出すことができるという意味では機能しますが、メンバーオブジェクトは期待どおりに動作しません。

js> defineClass("Hosted");
js> defineClass("Member");
js> var h = new Hosted();
js> h.toString();
[object Hosted]
js> h instanceof Hosted;
true
js> h.__proto__;
[object Hosted]
js> 
js> var m = h.member;
js> m.toString();
called toString()
js> m instanceof Member; // Should be true
false
js> m.__proto__; // Should be [object Member]
null

ただし、呼び出すとObject.prototype.toString、それはMemberオブジェクトであると表示されます。

js> Object.prototype.toString.call(m);
[object Member]

と呼んm.setPrototypeでみましContext.javaToJSた。

4

1 に答える 1