Package org.mozilla.javascript

## Class BaseFunction

- java.lang.Object
- - org.mozilla.javascript.ScriptableObject
  - - org.mozilla.javascript.IdScriptableObject
    - - org.mozilla.javascript.BaseFunction

- All Implemented Interfaces:
    `java.io.Serializable`, `Callable`, `ConstProperties`, `Constructable`, `DebuggableObject`, `Function`, `IdFunctionCall`, `Scriptable`, `SymbolScriptable`
  Direct Known Subclasses:
    `ArrowFunction`, `BoundFunction`, `FunctionObject`, `IdFunctionObject`, `LambdaFunction`, `NativeFunction`, `NativeJavaConstructor`, `NativeJavaMethod`, `Require`

      public class BaseFunction
      extends IdScriptableObject
      implements Function

  The base class for Function objects. That is one of two purposes. It is also the prototype for every "function" defined except those that are used as GeneratorFunctions via the ES6 "function *" syntax.

  See ECMA 15.3.

  See Also:
    Serialized Form

- - ### Nested Class Summary

    - ### Nested classes/interfaces inherited from class org.mozilla.javascript.ScriptableObject

      `ScriptableObject.KeyComparator`

  - ### Field Summary

    Fields
    Modifier and Type | Field | Description
    --- | --- | ---
    `protected static int` | `Id_arguments` |
    `protected static int` | `Id_arity` |
    `protected static int` | `Id_length` |
    `protected static int` | `Id_name` |
    `protected static int` | `Id_prototype` |
    `protected static int` | `MAX_INSTANCE_ID` |

    - ### Fields inherited from class org.mozilla.javascript.ScriptableObject

      `CONST, DONTENUM, EMPTY, PERMANENT, READONLY, UNINITIALIZED_CONST`

    - ### Fields inherited from interface org.mozilla.javascript.Scriptable

      `NOT_FOUND`

  - ### Constructor Summary

    Constructors
    Constructor | Description
    --- | ---
    `BaseFunction()` |
    `BaseFunction​(boolean isGenerator)` |
    `BaseFunction​(Scriptable scope, Scriptable prototype)` |

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `java.lang.Object` | `call​(Context cx, Scriptable scope, Scriptable thisObj, java.lang.Object[] args)` | Should be overridden.
    `Scriptable` | `construct​(Context cx, Scriptable scope, java.lang.Object[] args)` | Call the function as a constructor.
    `Scriptable` | `createObject​(Context cx, Scriptable scope)` | Creates new script object.
    `java.lang.Object` | `execIdCall​(IdFunctionObject f, Context cx, Scriptable scope, Scriptable thisObj, java.lang.Object[] args)` | 'thisObj' will be null if invoked as constructor, in which case * instance of Scriptable should be returned.
    `protected void` | `fillConstructorProperties​(IdFunctionObject ctor)` |
    `protected int` | `findInstanceIdInfo​(java.lang.String s)` | Map name to id of instance property.
    `protected int` | `findPrototypeId​(java.lang.String s)` |
    `int` | `getArity()` |
    `java.lang.String` | `getClassName()` | Return the name of the class.
    `protected Scriptable` | `getClassPrototype()` |
    `java.lang.String` | `getFunctionName()` |
    `protected java.lang.String` | `getInstanceIdName​(int id)` | Map id back to property name it defines.
    `protected java.lang.Object` | `getInstanceIdValue​(int id)` | Get id value.
    `int` | `getLength()` |
    `protected int` | `getMaxInstanceId()` | Get maximum id findInstanceIdInfo can generate.
    `protected java.lang.Object` | `getPrototypeProperty()` |
    `java.lang.String` | `getTypeOf()` | Gets the value returned by calling the typeof operator on this object.
    `boolean` | `hasInstance​(Scriptable instance)` | Implements the instanceof operator for JavaScript Function objects.
    `protected boolean` | `hasPrototypeProperty()` |
    `protected void` | `initPrototypeId​(int id)` |
    `protected boolean` | `isGeneratorFunction()` |
    `void` | `setImmunePrototypeProperty​(java.lang.Object value)` | Make value as DontEnum, DontDelete, ReadOnly prototype property of this Function object
    `protected void` | `setInstanceIdAttributes​(int id, int attr)` | Update the attributes of the given instance property.
    `protected void` | `setInstanceIdValue​(int id, java.lang.Object value)` | Set or delete id value.
    `protected void` | `setPrototypeProperty​(java.lang.Object prototype)` |
    `void` | `setPrototypePropertyAttributes​(int attributes)` |
    `void` | `setStandardPropertyAttributes​(int attributes)` | Sets the attributes of the "name", "length", and "arity" properties, which differ for many native objects.
    `protected java.lang.Object` | `setupDefaultPrototype()` |

    - ### Methods inherited from class org.mozilla.javascript.IdScriptableObject

      `activatePrototypeMap, addIdFunctionProperty, defaultGet, defaultHas, defaultPut, defineOwnProperty, delete, delete, ensureType, exportAsJSClass, findInstanceIdInfo, findPrototypeId, get, get, getAttributes, getAttributes, getOwnPropertyDescriptor, has, has, hasPrototypeMap, initPrototypeConstructor, initPrototypeMethod, initPrototypeMethod, initPrototypeMethod, initPrototypeValue, initPrototypeValue, instanceIdInfo, put, put, setAttributes`

    - ### Methods inherited from class org.mozilla.javascript.ScriptableObject

      `applyDescriptorToAttributeBitset, associateValue, avoidObjectDetection, buildDataDescriptor, callMethod, callMethod, checkPropertyChange, checkPropertyDefinition, defineClass, defineClass, defineClass, defineConst, defineConstProperty, defineFunctionProperties, defineOwnProperties, defineOwnProperty, defineProperty, defineProperty, defineProperty, defineProperty, defineProperty, defineProperty, defineProperty, delete, deleteProperty, deleteProperty, ensureScriptable, ensureScriptableObject, ensureSymbolScriptable, equivalentValues, get, get, getAllIds, getArrayPrototype, getAssociatedValue, getAttributes, getAttributes, getAttributes, getClassPrototype, getDefaultValue, getDefaultValue, getExternalArrayData, getExternalArrayLength, getFunctionPrototype, getGeneratorFunctionPrototype, getGetterOrSetter, getGetterOrSetter, getIds, getObjectPrototype, getParentScope, getProperty, getProperty, getProperty, getPropertyIds, getPrototype, getTopLevelScope, getTopScopeValue, getTypedProperty, getTypedProperty, has, hasProperty, hasProperty, hasProperty, isAccessorDescriptor, isConst, isDataDescriptor, isEmpty, isExtensible, isFalse, isGenericDescriptor, isGetterOrSetter, isSealed, isTrue, preventExtensions, put, putConst, putConstProperty, putProperty, putProperty, putProperty, querySlot, redefineProperty, sameValue, sealObject, setAttributes, setAttributes, setAttributes, setAttributes, setCommonDescriptorProperties, setExternalArrayData, setGetterOrSetter, setParentScope, setPrototype, size`

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

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

    - ### Methods inherited from interface org.mozilla.javascript.Scriptable

      `delete, delete, get, get, getDefaultValue, getIds, getParentScope, getPrototype, has, has, put, put, setParentScope, setPrototype`

- - ### Field Detail

    - #### Id_length

          protected static final int Id_length

      See Also:
        Constant Field Values

    - #### Id_arity

          protected static final int Id_arity

      See Also:
        Constant Field Values

    - #### Id_name

          protected static final int Id_name

      See Also:
        Constant Field Values

    - #### Id_prototype

          protected static final int Id_prototype

      See Also:
        Constant Field Values

    - #### Id_arguments

          protected static final int Id_arguments

      See Also:
        Constant Field Values

    - #### MAX_INSTANCE_ID

          protected static final int MAX_INSTANCE_ID

      See Also:
        Constant Field Values

  - ### Constructor Detail

    - #### BaseFunction

          public BaseFunction()

    - #### BaseFunction

          public BaseFunction​(boolean isGenerator)

    - #### BaseFunction

          public BaseFunction​(Scriptable scope,
                              Scriptable prototype)

  - ### Method Detail

    - #### getClassName

          public java.lang.String getClassName()

      Description copied from class: `ScriptableObject`
      Return the name of the class.

      This is typically the same name as the constructor. Classes extending ScriptableObject must implement this abstract method.

      Specified by:
        `getClassName` in interface `Scriptable`
      Specified by:
        `getClassName` in class `ScriptableObject`

    - #### isGeneratorFunction

          protected boolean isGeneratorFunction()

    - #### getTypeOf

          public java.lang.String getTypeOf()

      Gets the value returned by calling the typeof operator on this object.
      Overrides:
        `getTypeOf` in class `ScriptableObject`
      Returns:
        "function" or "undefined" if `ScriptableObject.avoidObjectDetection()` returns `true`
      See Also:
        `ScriptableObject.getTypeOf()`

    - #### hasInstance

          public boolean hasInstance​(Scriptable instance)

      Implements the instanceof operator for JavaScript Function objects.

      `foo = new Foo();
      foo instanceof Foo; // true
      `

      Specified by:
        `hasInstance` in interface `Scriptable`
      Overrides:
        `hasInstance` in class `ScriptableObject`
      Parameters:
        `instance` - The value that appeared on the LHS of the instanceof operator
      Returns:
        true if the "prototype" property of "this" appears in value's prototype chain

    - #### getMaxInstanceId

          protected int getMaxInstanceId()

      Description copied from class: `IdScriptableObject`
      Get maximum id findInstanceIdInfo can generate.
      Overrides:
        `getMaxInstanceId` in class `IdScriptableObject`

    - #### findInstanceIdInfo

          protected int findInstanceIdInfo​(java.lang.String s)

      Description copied from class: `IdScriptableObject`
      Map name to id of instance property. Should return 0 if not found or the result of `IdScriptableObject.instanceIdInfo(int, int)`.
      Overrides:
        `findInstanceIdInfo` in class `IdScriptableObject`

    - #### getInstanceIdName

          protected java.lang.String getInstanceIdName​(int id)

      Description copied from class: `IdScriptableObject`
      Map id back to property name it defines.
      Overrides:
        `getInstanceIdName` in class `IdScriptableObject`

    - #### getInstanceIdValue

          protected java.lang.Object getInstanceIdValue​(int id)

      Description copied from class: `IdScriptableObject`
      Get id value. * If id value is constant, descendant can call cacheIdValue to store * value in the permanent cache. * Default implementation creates IdFunctionObject instance for given id * and cache its value
      Overrides:
        `getInstanceIdValue` in class `IdScriptableObject`

    - #### setInstanceIdValue

          protected void setInstanceIdValue​(int id,
                                            java.lang.Object value)

      Description copied from class: `IdScriptableObject`
      Set or delete id value. If value == NOT_FOUND , the implementation should make sure that the following getInstanceIdValue return NOT_FOUND.
      Overrides:
        `setInstanceIdValue` in class `IdScriptableObject`

    - #### setInstanceIdAttributes

          protected void setInstanceIdAttributes​(int id,
                                                 int attr)

      Description copied from class: `IdScriptableObject`
      Update the attributes of the given instance property. Classes which want to support changing property attributes via Object.defineProperty must override this method. The default implementation throws InternalError.
      Overrides:
        `setInstanceIdAttributes` in class `IdScriptableObject`
      Parameters:
        `id` - the instance property id
        `attr` - the new attribute bitset

    - #### fillConstructorProperties

          protected void fillConstructorProperties​(IdFunctionObject ctor)

      Overrides:
        `fillConstructorProperties` in class `IdScriptableObject`

    - #### initPrototypeId

          protected void initPrototypeId​(int id)

      Overrides:
        `initPrototypeId` in class `IdScriptableObject`

    - #### execIdCall

          public java.lang.Object execIdCall​(IdFunctionObject f,
                                             Context cx,
                                             Scriptable scope,
                                             Scriptable thisObj,
                                             java.lang.Object[] args)

      Description copied from class: `IdScriptableObject`
      'thisObj' will be null if invoked as constructor, in which case * instance of Scriptable should be returned.
      Specified by:
        `execIdCall` in interface `IdFunctionCall`
      Overrides:
        `execIdCall` in class `IdScriptableObject`

    - #### setImmunePrototypeProperty

          public void setImmunePrototypeProperty​(java.lang.Object value)

      Make value as DontEnum, DontDelete, ReadOnly prototype property of this Function object

    - #### getClassPrototype

          protected Scriptable getClassPrototype()

    - #### call

          public java.lang.Object call​(Context cx,
                                       Scriptable scope,
                                       Scriptable thisObj,
                                       java.lang.Object[] args)

      Should be overridden.
      Specified by:
        `call` in interface `Callable`
      Specified by:
        `call` in interface `Function`
      Parameters:
        `cx` - the current Context for this thread
        `scope` - the scope to execute the function relative to. This is set to the value returned by getParentScope() except when the function is called from a closure.
        `thisObj` - the JavaScript `this` object
        `args` - the array of arguments
      Returns:
        the result of the call

    - #### construct

          public Scriptable construct​(Context cx,
                                      Scriptable scope,
                                      java.lang.Object[] args)

      Description copied from interface: `Function`
      Call the function as a constructor.

      This method is invoked by the runtime in order to satisfy a use of the JavaScript `new` operator. This method is expected to create a new object and return it.

      Specified by:
        `construct` in interface `Constructable`
      Specified by:
        `construct` in interface `Function`
      Parameters:
        `cx` - the current Context for this thread
        `scope` - an enclosing scope of the caller except when the function is called from a closure.
        `args` - the array of arguments
      Returns:
        the allocated object

    - #### createObject

          public Scriptable createObject​(Context cx,
                                         Scriptable scope)

      Creates new script object. The default implementation of `construct(org.mozilla.javascript.Context, org.mozilla.javascript.Scriptable, java.lang.Object[])` uses the method to to get the value for `thisObj` argument when invoking `call(org.mozilla.javascript.Context, org.mozilla.javascript.Scriptable, org.mozilla.javascript.Scriptable, java.lang.Object[])`. The methos is allowed to return `null` to indicate that `call(org.mozilla.javascript.Context, org.mozilla.javascript.Scriptable, org.mozilla.javascript.Scriptable, java.lang.Object[])` will create a new object itself. In this case `construct(org.mozilla.javascript.Context, org.mozilla.javascript.Scriptable, java.lang.Object[])` will set scope and prototype on the result `call(org.mozilla.javascript.Context, org.mozilla.javascript.Scriptable, org.mozilla.javascript.Scriptable, java.lang.Object[])` unless they are already set.

    - #### getArity

          public int getArity()

    - #### getLength

          public int getLength()

    - #### getFunctionName

          public java.lang.String getFunctionName()

    - #### setStandardPropertyAttributes

          public void setStandardPropertyAttributes​(int attributes)

      Sets the attributes of the "name", "length", and "arity" properties, which differ for many native objects.

    - #### setPrototypePropertyAttributes

          public void setPrototypePropertyAttributes​(int attributes)

    - #### hasPrototypeProperty

          protected boolean hasPrototypeProperty()

    - #### getPrototypeProperty

          protected java.lang.Object getPrototypeProperty()

    - #### setPrototypeProperty

          protected void setPrototypeProperty​(java.lang.Object prototype)

    - #### setupDefaultPrototype

          protected java.lang.Object setupDefaultPrototype()

    - #### findPrototypeId

          protected int findPrototypeId​(java.lang.String s)

      Overrides:
        `findPrototypeId` in class `IdScriptableObject`