|
||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||
SUMMARY: INNER | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object | +--org.mozilla.javascript.ScriptableObject
This is the default implementation of the Scriptable interface. This class provides convenient default behavior that makes it easier to define host objects.
Various properties and methods of JavaScript objects can be conveniently defined using methods of ScriptableObject.
Classes extending ScriptableObject must define the getClassName method.
Scriptable
Field Summary | |
static int |
DONTENUM
Property attribute indicating property is not enumerated. |
static int |
EMPTY
The empty property attribute. |
protected Scriptable |
parent
The parent scope of this object. |
static int |
PERMANENT
Property attribute indicating property cannot be deleted. |
protected Scriptable |
prototype
The prototype of this object. |
static int |
READONLY
Property attribute indicating assignment to this property is ignored. |
Fields inherited from interface org.mozilla.javascript.Scriptable |
NOT_FOUND |
Constructor Summary | |
ScriptableObject()
|
Method Summary | |
static void |
defineClass(Scriptable scope,
java.lang.Class clazz)
Defines JavaScript objects from a Java class. |
static void |
defineClass(Scriptable scope,
java.lang.Class clazz,
boolean sealed)
Defines JavaScript objects from a Java class, optionally allowing sealing. |
void |
defineFunctionProperties(java.lang.String[] names,
java.lang.Class clazz,
int attributes)
Search for names in a class, adding the resulting methods as properties. |
void |
defineProperty(java.lang.String propertyName,
java.lang.Class clazz,
int attributes)
Define a JavaScript property with getter and setter side effects. |
void |
defineProperty(java.lang.String propertyName,
java.lang.Object value,
int attributes)
Define a JavaScript property. |
void |
defineProperty(java.lang.String propertyName,
java.lang.Object delegateTo,
java.lang.reflect.Method getter,
java.lang.reflect.Method setter,
int attributes)
Define a JavaScript property. |
void |
delete(int index)
Removes the indexed property from the object. |
void |
delete(java.lang.String name)
Removes a named property from the object. |
java.lang.Object |
get(int index,
Scriptable start)
Returns the value of the indexed property or NOT_FOUND. |
java.lang.Object |
get(java.lang.String name,
Scriptable start)
Returns the value of the named property or NOT_FOUND. |
java.lang.Object[] |
getAllIds()
Returns an array of ids for the properties of the object. |
int |
getAttributes(int index,
Scriptable start)
Get the attributes of an indexed property. |
int |
getAttributes(java.lang.String name,
Scriptable start)
Get the attributes of a named property. |
abstract java.lang.String |
getClassName()
Return the name of the class. |
static Scriptable |
getClassPrototype(Scriptable scope,
java.lang.String className)
Get the prototype for the named class. |
java.lang.Object |
getDefaultValue(java.lang.Class typeHint)
Implements the [[DefaultValue]] internal method. |
static Scriptable |
getFunctionPrototype(Scriptable scope)
Get the Function.prototype property. |
java.lang.Object[] |
getIds()
Returns an array of ids for the properties of the object. |
static Scriptable |
getObjectPrototype(Scriptable scope)
Get the Object.prototype property. |
Scriptable |
getParentScope()
Returns the parent (enclosing) scope of the object. |
Scriptable |
getPrototype()
Returns the prototype of the object. |
static Scriptable |
getTopLevelScope(Scriptable obj)
Get the global scope. |
boolean |
has(int index,
Scriptable start)
Returns true if the property index is defined. |
boolean |
has(java.lang.String name,
Scriptable start)
Returns true if the named property is defined. |
boolean |
hasInstance(Scriptable instance)
Implements the instanceof operator. |
boolean |
isSealed()
Return true if this object is sealed. |
void |
put(int index,
Scriptable start,
java.lang.Object value)
Sets the value of the indexed property, creating it if need be. |
void |
put(java.lang.String name,
Scriptable start,
java.lang.Object value)
Sets the value of the named property, creating it if need be. |
void |
sealObject()
Seal this object. |
void |
setAttributes(int index,
Scriptable start,
int attributes)
Set the attributes of an indexed property. |
void |
setAttributes(java.lang.String name,
Scriptable start,
int attributes)
Set the attributes of a named property. |
void |
setParentScope(Scriptable m)
Sets the parent (enclosing) scope of the object. |
void |
setPrototype(Scriptable m)
Sets the prototype of the object. |
Methods inherited from class java.lang.Object |
clone,
equals,
finalize,
getClass,
hashCode,
notify,
notifyAll,
toString,
wait,
wait,
wait |
Field Detail |
public static final int EMPTY
getAttributes(java.lang.String, org.mozilla.javascript.Scriptable)
,
setAttributes(java.lang.String, org.mozilla.javascript.Scriptable, int)
public static final int READONLY
put(java.lang.String, org.mozilla.javascript.Scriptable, java.lang.Object)
,
getAttributes(java.lang.String, org.mozilla.javascript.Scriptable)
,
setAttributes(java.lang.String, org.mozilla.javascript.Scriptable, int)
public static final int DONTENUM
getIds()
,
getAttributes(java.lang.String, org.mozilla.javascript.Scriptable)
,
setAttributes(java.lang.String, org.mozilla.javascript.Scriptable, int)
public static final int PERMANENT
delete(java.lang.String)
,
getAttributes(java.lang.String, org.mozilla.javascript.Scriptable)
,
setAttributes(java.lang.String, org.mozilla.javascript.Scriptable, int)
protected Scriptable prototype
protected Scriptable parent
Constructor Detail |
public ScriptableObject()
Method Detail |
public abstract java.lang.String getClassName()
public boolean has(java.lang.String name, Scriptable start)
name
- the name of the propertystart
- the object in which the lookup beganpublic boolean has(int index, Scriptable start)
index
- the numeric index for the propertystart
- the object in which the lookup beganpublic java.lang.Object get(java.lang.String name, Scriptable start)
name
- the name of the propertystart
- the object in which the lookup beganpublic java.lang.Object get(int index, Scriptable start)
index
- the numeric index for the propertystart
- the object in which the lookup beganpublic void put(java.lang.String name, Scriptable start, java.lang.Object value)
If the property's attributes include READONLY, no action is taken. This method will actually set the property in the start object.
name
- the name of the propertystart
- the object whose property is being setvalue
- value to set the property topublic void put(int index, Scriptable start, java.lang.Object value)
index
- the numeric index for the propertystart
- the object whose property is being setvalue
- value to set the property topublic void delete(java.lang.String name)
name
- the name of the propertypublic void delete(int index)
index
- the numeric index for the propertypublic int getAttributes(java.lang.String name, Scriptable start) throws PropertyException
name
as defined for has
.name
- the identifier for the propertystart
- the object in which the lookup beganhas(java.lang.String, org.mozilla.javascript.Scriptable)
,
READONLY
,
DONTENUM
,
PERMANENT
,
EMPTY
public int getAttributes(int index, Scriptable start) throws PropertyException
index
- the numeric index for the propertystart
- the object in which the lookup beganhas(java.lang.String, org.mozilla.javascript.Scriptable)
,
READONLY
,
DONTENUM
,
PERMANENT
,
EMPTY
public void setAttributes(java.lang.String name, Scriptable start, int attributes) throws PropertyException
name
as defined for has
.The possible attributes are READONLY, DONTENUM, and PERMANENT. Combinations of attributes are expressed by the bitwise OR of attributes. EMPTY is the state of no attributes set. Any unused bits are reserved for future use.
name
- the name of the propertystart
- the object in which the lookup beganattributes
- the bitset of attributesScriptable.has(java.lang.String, org.mozilla.javascript.Scriptable)
,
READONLY
,
DONTENUM
,
PERMANENT
,
EMPTY
public void setAttributes(int index, Scriptable start, int attributes) throws PropertyException
index
- the numeric index for the propertystart
- the object in which the lookup beganattributes
- the bitset of attributesScriptable.has(java.lang.String, org.mozilla.javascript.Scriptable)
,
READONLY
,
DONTENUM
,
PERMANENT
,
EMPTY
public Scriptable getPrototype()
public void setPrototype(Scriptable m)
prototype
- the prototype to setpublic Scriptable getParentScope()
public void setParentScope(Scriptable m)
parent
- the parent scope to setpublic java.lang.Object[] getIds()
Any properties with the attribute DONTENUM are not listed.
public java.lang.Object[] getAllIds()
All properties, even those with attribute DONTENUM, are listed.
public java.lang.Object getDefaultValue(java.lang.Class typeHint)
Note that the toPrimitive conversion is a no-op for every type other than Object, for which [[DefaultValue]] is called. See ECMA 9.1.
A hint
of null means "no hint".
typeHint
- the type hintpublic boolean hasInstance(Scriptable instance)
This operator has been proposed to ECMA.
instance
- The value that appeared on the LHS of the instanceof
operatorpublic static void defineClass(Scriptable scope, java.lang.Class clazz) throws java.lang.IllegalAccessException, java.lang.InstantiationException, java.lang.reflect.InvocationTargetException, ClassDefinitionException, PropertyException
static void init(Scriptable scope);then it is invoked and no further initialization is done and the result of the invocation will be returned.
However, if no such a method is found, then the class's constructors and methods are used to initialize a class in the following manner.
First, the zero-parameter constructor of the class is called to create the prototype. If no such constructor exists, a ClassDefinitionException is thrown.
Next, all methods are scanned for special prefixes that indicate that they have special meaning for defining JavaScript objects. These special prefixes are
jsFunction_
for a JavaScript function
jsStaticFunction_
for a JavaScript function that
is a property of the constructor
jsGet_
for a getter of a JavaScript property
jsSet_
for a setter of a JavaScript property
jsConstructor
for a JavaScript function that
is the constructor
If the method's name begins with "jsFunction_", a JavaScript function is created with a name formed from the rest of the Java method name following "jsFunction_". So a Java method named "jsFunction_foo" will define a JavaScript method "foo". Calling this JavaScript function will cause the Java method to be called. The parameters of the method must be of number and types as defined by the FunctionObject class. The JavaScript function is then added as a property of the prototype.
If the method's name begins with "jsStaticFunction_", it is handled similarly except that the resulting JavaScript function is added as a property of the constructor object. The Java method must be static. If the method's name begins with "jsGet_" or "jsSet_", the method is considered to define a property. Accesses to the defined property will result in calls to these getter and setter methods. If no setter is defined, the property is defined as READONLY.
If the method's name is "jsConstructor", the method is considered to define the body of the constructor. Only one method of this name may be defined. If no method is found that can serve as constructor, a Java constructor will be selected to serve as the JavaScript constructor in the following manner. If the class has only one Java constructor, that constructor is used to define the JavaScript constructor. If the the class has two constructors, one must be the zero-argument constructor (otherwise an ClassDefinitionException would have already been thrown when the prototype was to be created). In this case the Java constructor with one or more parameters will be used to define the JavaScript constructor. If the class has three or more constructors, an ClassDefinitionException will be thrown.
Finally, if there is a method
static void finishInit(Scriptable scope, FunctionObject constructor, Scriptable prototype)it will be called to finish any initialization. The
scope
argument will be passed, along with the newly created constructor and
the newly created prototype.scope
- The scope in which to define the constructorclazz
- The Java class to use to define the JavaScript objects
and propertiesFunction
,
FunctionObject
,
READONLY
,
defineProperty(java.lang.String, java.lang.Object, int)
public static void defineClass(Scriptable scope, java.lang.Class clazz, boolean sealed) throws java.lang.IllegalAccessException, java.lang.InstantiationException, java.lang.reflect.InvocationTargetException, ClassDefinitionException, PropertyException
defineClass(Scriptable scope, Class clazz)
except that sealing is allowed. An object that is sealed cannot have
properties added or removed. Note that sealing is not allowed in
the current ECMA/ISO language specification, but is likely for
the next version.scope
- The scope in which to define the constructorclazz
- The Java class to use to define the JavaScript objects
and propertiessealed
- whether or not to create sealed standard objects that
cannot be modified.public void defineProperty(java.lang.String propertyName, java.lang.Object value, int attributes)
propertyName
- the name of the property to define.value
- the initial value of the propertyattributes
- the attributes of the JavaScript propertyScriptable.put(java.lang.String, org.mozilla.javascript.Scriptable, java.lang.Object)
public void defineProperty(java.lang.String propertyName, java.lang.Class clazz, int attributes) throws PropertyException
The getter must be a method with zero parameters, and the setter, if found, must be a method with one parameter.
propertyName
- the name of the property to define. This name
also affects the name of the setter and getter
to search for. If the propertyId is "foo", then
clazz
will be searched for "getFoo"
and "setFoo" methods.clazz
- the Java class to search for the getter and setterattributes
- the attributes of the JavaScript propertydefineProperty(String, Object, Method, Method,
int)
Scriptable.put(java.lang.String, org.mozilla.javascript.Scriptable, java.lang.Object)
public void defineProperty(java.lang.String propertyName, java.lang.Object delegateTo, java.lang.reflect.Method getter, java.lang.reflect.Method setter, int attributes) throws PropertyException
defineProperty(String,int)
.
If setter
is null, the attribute READONLY is added to
the given attributes.Several forms of getters or setters are allowed. In all cases the type of the value parameter can be any one of the following types: Object, String, boolean, Scriptable, byte, short, int, long, float, or double. The runtime will perform appropriate conversions based upon the type of the parameter (see description in FunctionObject). The first forms are nonstatic methods of the class referred to by 'this':
Object getFoo(); void setFoo(SomeType value);Next are static methods that may be of any class; the object whose property is being accessed is passed in as an extra argument:
static Object getFoo(ScriptableObject obj); static void setFoo(ScriptableObject obj, SomeType value);Finally, it is possible to delegate to another object entirely using the
delegateTo
parameter. In this case the methods are
nonstatic methods of the class delegated to, and the object whose
property is being accessed is passed in as an extra argument:
Object getFoo(ScriptableObject obj); void setFoo(ScriptableObject obj, SomeType value);
propertyName
- the name of the property to define.delegateTo
- an object to call the getter and setter methods on,
or null, depending on the form used above.getter
- the method to invoke to get the value of the propertysetter
- the method to invoke to set the value of the propertyattributes
- the attributes of the JavaScript propertypublic void defineFunctionProperties(java.lang.String[] names, java.lang.Class clazz, int attributes) throws PropertyException
Uses reflection to find the methods of the given names. Then FunctionObjects are constructed from the methods found, and are added to this object as properties with the given names.
names
- the names of the Methods to add as function propertiesclazz
- the class to search for the Methodsattributes
- the attributes of the new propertiesFunctionObject
public static Scriptable getObjectPrototype(Scriptable scope)
public static Scriptable getFunctionPrototype(Scriptable scope)
public static Scriptable getClassPrototype(Scriptable scope, java.lang.String className)
getClassPrototype(s, "Date")
will first
walk up the parent chain to find the outermost scope, then will
search that scope for the Date constructor, and then will
return Date.prototype. If any of the lookups fail, or
the prototype is not a JavaScript object, then null will
be returned.scope
- an object in the scope chainclassName
- the name of the constructorpublic static Scriptable getTopLevelScope(Scriptable obj)
Walks the parent scope chain to find an object with a null parent scope (the global object).
obj
- a JavaScript objectpublic void sealObject()
public boolean isSealed()
|
||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||
SUMMARY: INNER | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |