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