【问题标题】:Passing in a global object to ScriptObjectMirror.unwrap将全局对象传递给 ScriptObjectMirror.unwrap
【发布时间】:2015-12-08 00:59:52
【问题描述】:

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

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

【问题讨论】:

    标签: javascript java nashorn


    【解决方案1】:

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

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

    【讨论】:

    • 我发现如何获得全局的唯一(丑陋)方法是使用私有反射(不要评判我:))来获得似乎在每个 ScriptObjectMirror 上的全局。我正在尝试实现在数据流中传递 ScriptObjectMirrors 的能力,而无需显式传递引擎。如果不破坏封装似乎很困难。呜呜。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-14
    • 1970-01-01
    • 2014-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多