将全局对象传递给ScriptObjectMirror.unwrap

时间:2015-12-08 00:59:53

标签: javascript java nashorn

ScriptObjectMirror有一个unwrap方法,它接受Global个对象。问题是我无法弄清楚如何发送全局对象,因为它似乎不是一种简单的方法来访问它。这意味着我总是得到镜像而不是原始对象(来自ScriptObjectMirror.class的反编译代码):

public static Object unwrap(Object obj, Object homeGlobal) {
    if(obj instanceof ScriptObjectMirror) {
        ScriptObjectMirror mirror = (ScriptObjectMirror) obj;
        return mirror.global == homeGlobal ? mirror.sobj : obj;
    } else {
        return obj instanceof JSONListAdapter?((JSONListAdapter)obj).unwrap(homeGlobal):obj;
    }
}

如何传入正确的全局对象?

1 个答案:

答案 0 :(得分:2)

在Nashorn中,您无法从外部环境中解包ScriptObjectMirror个实例。也就是说,如果当前全局(JavaScript“全局”对象)与要解包的对象的全局不同,Nashorn将不会解包它。似乎也没有办法访问JavaScript对象的当前全局。

有一个ScriptUtils#unwrap没有接受全局,但它也显示相同的行为。