Relates :
|
This issue was reported by Art Fiedler via nashorn-dev openjdk alias: http://mail.openjdk.java.net/pipermail/nashorn-dev/2016-November/006662.html email content cut-pasted here for convenience: --- email from Art Fiedler ---- When calling the following code, I expected the call to myJSObject inside testJSOCall to pass the current scope as a ScriptObjectMirror to JSObjectImpl's call method as the thiz argument. In this case without modifying the call to myJSObject() should 'this' automatically be passed to the call() method? Thanks, Arthur Fiedler public class NashornBugTest { public static void main(String[] args) throws Exception { NashornScriptEngineFactory factory = new NashornScriptEngineFactory(); ScriptEngine scriptEngine = factory.getScriptEngine(); scriptEngine.put("myJSObject", new JSObjectImpl()); scriptEngine.eval( "var a = 42;\n" + "function testJSOCall(b) {\n" + " myJSObject('text purposely did not pass b');\n" + "}\n" + "testJSOCall(a);\n"); } public static class JSObjectImpl extends AbstractJSObject { @Override public Object call(Object thiz, Object... args) { if (ScriptObjectMirror.isUndefined(thiz) || thiz == null) throw new IllegalArgumentException("'thiz' is undefined/null"); // TODO: need the value of 'b' in the calling function return super.call(thiz, args); } @Override public boolean isFunction() { return true; } } }