Rhino,一个不错的Javascript引擎
package co.test; import java.io.FileReader; import java.io.LineNumberReader; import org.mozilla.javascript.Context; import org.mozilla.javascript.Function; import org.mozilla.javascript.Scriptable; public class JSExploration { private Context cx; private Scriptable scope; public JSExploration() { this.cx = Context.enter(); this.scope = cx.initStandardObjects(); } public Object runJavaScript(String filename) { String jsContent = this.getJsContent(filename); Object result = cx.evaluateString(scope, jsContent, filename, 1, null); return result; } private String getJsContent(String filename) { LineNumberReader reader; try { reader = new LineNumberReader(new FileReader(filename)); String s = null; StringBuffer sb = new StringBuffer(); while ((s = reader.readLine()) != null) { sb.append(s).append("\n"); } return sb.toString(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); return null; } } public Scriptable getScope() { return scope; } public static void main(String[] args) { String filename = System.getProperty("user.dir") + "/jsmap.js"; JSExploration jsExploration = new JSExploration(); Object result = jsExploration.runJavaScript(filename); Scriptable scope = jsExploration.getScope(); Function sum = (Function) scope.get("sum", scope); Function isPrime = (Function)sum.call(Context.getCurrentContext(), scope, sum, new Object[] {2,8}); Object ss = isPrime.call(Context.getCurrentContext(), sum, isPrime, new Object[] {2,8}); System.out.println(Context.toString(ss)); } }
?
?
function sum(x, y) { // this.formulaeObject = null; // this.formulaeObject["vager"] = function (c, d) { // return (c + d)/2; // }; var vager = 1000; return function (x,y){return x + y + vager;} ; }?
?