JSObject call() is passed undefined/null for the argument 'thiz'?
Sundararajan Athijegannathan
sundararajan.athijegannathan at oracle.com
Thu Dec 1 05:08:51 UTC 2016
Thanks for reporting this issue. Filed a bug:
https://bugs.openjdk.java.net/browse/JDK-8170565
Thanks,
-Sundar
On 01/12/16, 12:36 AM, Art Fiedler wrote:
> @Sundararajan
>
> 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;
> }
> }
> }
More information about the nashorn-dev
mailing list