com.google.gwt.core.client

## Class JavaScriptObject

- java.lang.Object
- - com.google.gwt.core.client.JavaScriptObject

- Direct Known Subclasses:
    ArrayBufferNative, ArrayBufferViewNative, CanvasPixelArray, Context2d, DataTransfer, EventTarget, FillStrokeStyle, ImageData, JsArray, JsArrayBoolean, JsArrayInteger, JsArrayMixed, JsArrayNumber, JsArrayString, JsDate, MediaError, NativeEvent, Node, NodeCollection, NodeList, PositionImpl, PositionImpl.CoordinatesImpl, StorageEvent, Style, TextMetrics, TimeRanges, TimeZoneInfo, Touch, XMLHttpRequest

      public class JavaScriptObject
      extends java.lang.Object

  An opaque handle to a native JavaScript object. A `JavaScriptObject` cannot be created directly. `JavaScriptObject` should be declared as the return type of a JSNI method that returns native (non-Java) objects. A `JavaScriptObject` passed back into JSNI from Java becomes the original object, and can be accessed in JavaScript as expected.

- - ### Constructor Summary

    Constructors
    Modifier | Constructor and Description
    --- | ---
    `protected` | `JavaScriptObject()` Not directly instantiable.

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `<T extends JavaScriptObject> T` | `cast()` A helper method to enable cross-casting from any `JavaScriptObject` type to any other `JavaScriptObject` type.
    `static JavaScriptObject` | `createArray()` Returns a new array.
    `static JavaScriptObject` | `createFunction()` Returns an empty function.
    `static JavaScriptObject` | `createObject()` Returns a new object.
    `boolean` | `equals(java.lang.Object other)` Returns `true` if the objects are JavaScript identical (triple-equals).
    `int` | `hashCode()` Uses a monotonically increasing counter to assign a hash code to the underlying JavaScript object.
    `java.lang.String` | `toSource()` Call the toSource() on the JSO.
    `java.lang.String` | `toString()` Makes a best-effort attempt to get a useful debugging string describing the given JavaScriptObject.

    - ### Methods inherited from class java.lang.Object

      `clone, finalize, getClass, notify, notifyAll, wait, wait, wait`

- - ### Constructor Detail

    - #### JavaScriptObject

          protected JavaScriptObject()

      Not directly instantiable. All subclasses must also define a protected, empty, no-arg constructor.

  - ### Method Detail

    - #### createArray

          public static JavaScriptObject createArray()

      Returns a new array.

    - #### createFunction

          public static JavaScriptObject createFunction()

      Returns an empty function.

    - #### createObject

          public static JavaScriptObject createObject()

      Returns a new object.

    - #### cast

          public final <T extends JavaScriptObject> T cast()

      A helper method to enable cross-casting from any `JavaScriptObject` type to any other `JavaScriptObject` type.
      Type Parameters:
        `T` - the target type
      Returns:
        this object as a different type

    - #### equals

          public final boolean equals(java.lang.Object other)

      Returns `true` if the objects are JavaScript identical (triple-equals).
      Overrides:
        `equals` in class `java.lang.Object`

    - #### hashCode

          public final int hashCode()

      Uses a monotonically increasing counter to assign a hash code to the underlying JavaScript object. Do not call this method on non-modifiable JavaScript objects. TODO: if the underlying object defines a 'hashCode' method maybe use that?
      Overrides:
        `hashCode` in class `java.lang.Object`
      Returns:
        the hash code of the object

    - #### toSource

          public java.lang.String toSource()

      Call the toSource() on the JSO.

    - #### toString

          public final java.lang.String toString()

      Makes a best-effort attempt to get a useful debugging string describing the given JavaScriptObject. In Production Mode with assertions disabled, this will either call and return the JSO's toString() if one exists, or just return "[JavaScriptObject]". In Development Mode, or with assertions enabled, some stronger effort is made to represent other types of JSOs, including inspecting for document nodes' outerHTML and innerHTML, etc.
      Overrides:
        `toString` in class `java.lang.Object`