我正在编写一个使用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')");
我已经在Google Chrome的JS控制台中试过了这个并没有引发任何错误
我想知道这是完成这项任务的正确方法吗?
TL; DR: 在定义对象时是否加载了对象的属性并检查了?
答案 0 :(得分:1)
如果你的engine
是有状态的,那就是它跟踪定义的变量,是的,你的方法是正确的并且将按预期工作
但如果不是,你的方式就会失败,因为当你打电话给下面的
String fileToLoad = engine.eval("definition.loadFile");
您的引擎没有关于definition
对象的任何信息,因此它会返回异常(在JavaScript中)。
看来你的引擎是有状态的,所有东西都能正常工作