org.mozilla.javascript

## Interface ConstProperties

- All Known Implementing Classes:
    BaseFunction, BoundFunction, FunctionObject, IdFunctionObject, IdScriptableObject, ImporterTopLevel, ModuleScope, NativeArray, NativeCall, NativeContinuation, NativeFunction, NativeGenerator, NativeIterator, NativeJavaConstructor, NativeJavaMethod, NativeJavaPackage, NativeJavaTopPackage, NativeJSON, NativeObject, NativeRegExp, Require, ScriptableObject, TopLevel, XMLObject

      public interface ConstProperties

- - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `void` | `defineConst(java.lang.String name, Scriptable start)` Reserves a definition spot for a const.
    `boolean` | `isConst(java.lang.String name)` Returns true if the named property is defined as a const on this object.
    `void` | `putConst(java.lang.String name, Scriptable start, java.lang.Object value)` Sets a named const property in this object.

- - ### Method Detail

    - #### putConst

          void putConst(java.lang.String name,
                      Scriptable start,
                      java.lang.Object value)

      Sets a named const property in this object.

      The property is specified by a string name as defined for `Scriptable.get`.

      The possible values that may be passed in are as defined for `Scriptable.get`. A class that implements this method may choose to ignore calls to set certain properties, in which case those properties are effectively read-only.

      For properties defined in a prototype chain, use `putProperty` in ScriptableObject.

      Note that if a property a is defined in the prototype p of an object o, then evaluating `o.a = 23` will cause `set` to be called on the prototype p with o as the start parameter. To preserve JavaScript semantics, it is the Scriptable object's responsibility to modify o.

      This design allows properties to be defined in prototypes and implemented in terms of getters and setters of Java values without consuming slots in each instance.

      The values that may be set are limited to the following:

      - java.lang.Boolean objects
      - java.lang.String objects
      - java.lang.Number objects
      - org.mozilla.javascript.Scriptable objects
      - null
      - The value returned by Context.getUndefinedValue()

      Arbitrary Java objects may be wrapped in a Scriptable by first calling `Context.toObject`. This allows the property of a JavaScript object to contain an arbitrary Java object as a value.

      Note that `has` will be called by the runtime first before `set` is called to determine in which object the property is defined. Note that this method is not expected to traverse the prototype chain, which is different from the ECMA [[Put]] operation.

      Parameters:
        `name` - the name of the property
        `start` - the object whose property is being set
        `value` - value to set the property to
      See Also:
        `Scriptable.has(String, Scriptable)`, `Scriptable.get(String, Scriptable)`, `ScriptableObject.putProperty(Scriptable, String, Object)`, `Context.toObject(Object, Scriptable)`

    - #### defineConst

          void defineConst(java.lang.String name,
                         Scriptable start)

      Reserves a definition spot for a const. This will set up a definition of the const property, but set its value to undefined. The semantics of the start parameter is the same as for putConst.
      Parameters:
        `name` - The name of the property.
        `start` - The object whose property is being reserved.

    - #### isConst

          boolean isConst(java.lang.String name)

      Returns true if the named property is defined as a const on this object.
      Parameters:
        `name` -
      Returns:
        true if the named property is defined as a const, false otherwise.