Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript(Rhino)使用库或包含其他脚本_Java_Javascript_Rhino - Fatal编程技术网

JavaScript(Rhino)使用库或包含其他脚本

JavaScript(Rhino)使用库或包含其他脚本,java,javascript,rhino,Java,Javascript,Rhino,在JDK6中,是否有一种方法可以加载多个脚本,每个脚本都在一个文件中,并让一个脚本引用另一个脚本的方法?有点像“include”只要您使用相同的作用域来执行每个文件,它们就能够引用以前执行的文件中的函数和变量。我想您是在寻找Rhino的全局对象/作用域 load("file1.js"); load("file2.js"); load("file3.js"); methodFromFileOne(); var bar = methodFromFileTwo(); var etc = dotDot

在JDK6中,是否有一种方法可以加载多个脚本,每个脚本都在一个文件中,并让一个脚本引用另一个脚本的方法?有点像“include”

只要您使用相同的作用域来执行每个文件,它们就能够引用以前执行的文件中的函数和变量。

我想您是在寻找Rhino的全局对象/作用域

load("file1.js");
load("file2.js");
load("file3.js");

methodFromFileOne();
var bar = methodFromFileTwo();
var etc = dotDotDot();
这将加载一个javascript源文件,类似于PHP中include/require的方式。加载文件后,您将能够调用和运行或使用加载文件中定义的任何对象


这就是当您使用Rhino shell时的工作方式,这是我所知道的唯一上下文(您的问题提到了Java SDK,这超出了我的经验范围)

如果您碰巧在ant中尝试这样做,您可能会看到以下错误:

<script language="javascript">
    load('foo.js');
</script>
javax.script.ScriptException: sun.org.mozilla.javascript.internal.EcmaError: TypeError: Cannot find function load.

加载('foo.js');
javax.script.ScriptException:sun.org.mozilla.javascript.internal.EcmaError:TypeError:找不到函数加载。
但你可以避开它:

<script language="javascript">
    eval(''+new String(org.apache.tools.ant.util.FileUtils.readFully(new java.io.FileReader('foo.js'))));
</script>

eval(“”+新字符串(org.apache.tools.ant.util.FileUtils.readFully(newjava.io.FileReader('foo.js')));

这是一个真实的例子,即使用Rhino 1.7R4运行解析器

import org.mozilla.javascript.Context;
import org.mozilla.javascript.Scriptable;
import org.mozilla.javascript.ScriptableObject;
...

Context context = Context.enter();
Scriptable globalScope = context.initStandardObjects();
Reader esprimaLibReader = new InputStreamReader(getClass().getResourceAsStream("/esprima.js"));
context.evaluateReader(globalScope, esprimaLibReader, "esprima.js", 1, null);

// Add a global variable out that is a JavaScript reflection of the System.out variable:
Object wrappedOut = Context.javaToJS(System.out, globalScope);
ScriptableObject.putProperty(globalScope, "out", wrappedOut);

String code = "var syntax = esprima.parse('42');" +
    "out.print(JSON.stringify(syntax, null, 2));";

// The module esprima is available as a global object due to the same
// scope object passed for evaluation:
context.evaluateString(globalScope, code, "<mem>", 1, null);
Context.exit();

因此,关键在于重用
globalScope
对象。

这在Rhino shell之外可用吗?不确定,这不是我的工资。(更新了问题以反映这一点)该>>“”+
{
  "type": "Program",
  "body": [
    {
      "type": "ExpressionStatement",
      "expression": {
        "type": "Literal",
        "value": 42,
        "raw": "42"
      }
    }
  ]
}