当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《JavaScript(Rhino)使用库或包含其他脚本》经验,为你挑选了4个好方法。

在JDK6中,有没有办法在文件中加载多个脚本,并让一个脚本引用另一个脚本的方法?有点像"包括"?



1> Alan Storm..:

我想你是在Rhino的全局对象/范围的load()方法/属性之后

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

methodFromFileOne();
var bar = methodFromFileTwo();
var etc = dotDotDot();

这将加载一个javascript源文件,类似于PHP中的include/require方式.加载文件后,您将能够调用并运行或使用加载文件中定义的任何对象.

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



2> 小智..:

如果你碰巧在ant中试图这样做,你可能会看到这个错误:


javax.script.ScriptException: sun.org.mozilla.javascript.internal.EcmaError: TypeError: Cannot find function load.

但你可以回避它:




3> Daniel Pacak..:

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

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, "", 1, null);
Context.exit();

运行此代码后,您应该看到输出如下:

{
  "type": "Program",
  "body": [
    {
      "type": "ExpressionStatement",
      "expression": {
        "type": "Literal",
        "value": 42,
        "raw": "42"
      }
    }
  ]
}

事实上,诀窍是重用globalScope对象.



4> Matthew Crum..:

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

推荐阅读
手机用户2402851335
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有