# Interface JSFunction

public interface JSFunction

The JSFunction interface allows you to implement functions in Java that can be called from Javascript. You can assign any JSFunction object to be a member method of an existing JSObject via the `Object) JSObject.set()` method. Then the function can be called from javascript just like any other Javascript method. JSFunction methods are called asynchronously from Javascript to prevent deadlocks. If you require a return value to Javascript, you can do that by passing a callback function which is called by the JSFunction with some parameters.

NOTE: The `com.codename1.javascript` package is now deprecated. The preferred method of Java/Javascript interop is to use `BrowserComponent#execute(java.lang.String)`, `com.codename1.util.SuccessCallback)`, `BrowserComponent#executeAndWait(java.lang.String)`, etc.. as these work asynchronously (except in the XXXAndWait() variants, which use invokeAndBlock() to make the calls synchronously.

The following example, adds a camera object to the Javascript environment that has a capture() method, which can be used to capture images using the device's camera:

`java // Create a new Javascript object "camera" final JSObject camera = (JSObject)ctx.get("{}"); // Create a capture() method on the camera object // as a JSFunction callback. camera.set("capture", new JSFunction(){ public void apply(JSObject self, final Object[] args) { Display.getInstance().capturePhoto(new ActionListener(){ public void actionPerformed(ActionEvent evt) { String imagePath = (String)evt.getSource(); // Get the callback function that was provided // from javascript JSObject callback = (JSObject)args[0]; ctx.call( callback, // The function camera, // The "this" object new Object[]{"file://"+imagePath} // Parameters ); } }); } }); // Add the camera object to the top-level window object ctx.set("window.camera", camera);`

We can then capture photos directly from Javascript using a function similar to the following:

`java camera.capture(function(url){ if ( url == null ){ // No image was captured return; } // Fetch the preview tag. var image = document.getElementById('preview-image'); // Set the preview URL to the image that was taken. image.src = url; });`

- ## Method Summary

  Modifier and Type
  Method
  Description
  `void`
  `apply(JSObject self, java.lang.Object[] args)`

- ## Method Details

  - ### apply

    void apply(JSObject self, java.lang.Object[] args)