【发布时间】:2014-07-31 09:05:33
【问题描述】:
我正在编写一个使用 rhino(或浏览器)动态加载 javascript 的应用程序;我有 2 个文件:
// in a file called fooDefinition.js
var definition = {
foo: function(data){return bar(data)},
loadFile: "barLib.js"
}
现在,bar() 的定义如下:
// in a file called barLib.js
function bar(data){
return data + " -> bar!";
}
这就是我想做的:
- 将
fooDefinition.js加载到环境中 - 读取
loadFile的值(本例中为"barLib.js")并加载文件(注意:通过外部机制加载文件,而不是通过javascript本身!) - 致电
foo
外部机制&示例用法(Java伪代码):
// assume engine is a statefull engine (rhino for example)
String str = /*content of fooDefinition.js*/;
engine.eval(str);
String fileToLoad = engine.eval("definition.loadFile");
engine.load(IOUtils.readFileToString(new File(fileToLoad)));
String result = engine.eval("definition.foo('myData')");
我已经在谷歌浏览器的 JS 控制台中尝试过了,没有抛出任何错误
我想知道这是完成这项任务的正确方法吗?
TL;DR: 定义对象时是否加载并检查对象的属性?
【问题讨论】:
-
范围在调用时解析。
-
“通过外部机制加载文件,而不是通过 javascript 本身!”是什么意思?它是纯 javascript,还是 HTML 网页中的 javascript?
-
基本上,我将通过 Java 手动加载 javascript
-
@NiettheDarkAbsol 我的用法有效吗?
-
您的
engine状态是否完整?我的意思是,它是否跟踪定义的变量?如果是这样,如果您使用engine.eval("definition.foo('myData')");,您的方式似乎是正确的
标签: java javascript object scope