当调试在Nashorn解释器中运行的一些JavaScript(在版本2016.3.4中运行)时,我可以看到一些变量作为JavaScript对象正确显示,可以在Evaluate Expression窗口中进行评估,而其他变量则显示作为JO对象。显示为JO对象的那些不能被评估,因为它给出了NativeReferenceError异常。
如何将JO对象视为JavaScript变量并对其进行评估?
IntelliJ window showing how some JavaScript objects cannot be evaluated
答案 0 :(得分:0)
事实证明,这非常容易解决。只需要捕获Java类中的JavaScript变量,以便可以在Evaluate Expression窗口中引用它们。像这样的班级可以完成这项工作:
package foo;
import jdk.nashorn.api.scripting.ScriptObjectMirror;
public class NashornCapture {
private static Object[] args;
private static ScriptObjectMirror arg;
public static void capture(Object... vars) {
args = vars;
}
public static void capture(ScriptObjectMirror vars) {
arg = vars;
}
public static Object arg(int index) {
return args[index];
}
public static Object arg(String name) {
return arg.get(name);
}
}
然后您可以按索引或名称引用变量,如下图所示。
IntelliJ window showing how you can evaluate variables using a helper class