public class FunctionObject extends BaseFunction
hasPrototypeProperty| Modifier and Type | Field and Description |
|---|---|
static int |
JAVA_BOOLEAN_TYPE |
static int |
JAVA_DOUBLE_TYPE |
static int |
JAVA_INT_TYPE |
static int |
JAVA_OBJECT_TYPE |
static int |
JAVA_SCRIPTABLE_TYPE |
static int |
JAVA_STRING_TYPE |
static int |
JAVA_UNSUPPORTED_TYPE |
CONST, DONTENUM, EMPTY, PERMANENT, READONLY, UNINITIALIZED_CONSTNOT_FOUND| Constructor and Description |
|---|
FunctionObject(java.lang.String name,
java.lang.reflect.Member methodOrConstructor,
Scriptable scope)
Create a JavaScript function object from a Java method.
|
| Modifier and Type | Method and Description |
|---|---|
void |
addAsConstructor(Scriptable scope,
Scriptable prototype)
Define this function as a JavaScript constructor.
|
java.lang.Object |
call(Context cx,
Scriptable scope,
Scriptable thisObj,
java.lang.Object[] args)
Performs conversions on argument types if needed and invokes the
underlying Java method or constructor.
|
static java.lang.Object |
convertArg(Context cx,
Scriptable scope,
java.lang.Object arg,
java.lang.Class<?> desired)
Deprecated.
Use
getTypeTag(Class) and
convertArg(Context, Scriptable, Object, int) for
type conversion. |
static java.lang.Object |
convertArg(Context cx,
Scriptable scope,
java.lang.Object arg,
int typeTag) |
Scriptable |
createObject(Context cx,
Scriptable scope)
Return new
Scriptable instance using the default constructor for
the class of the underlying Java method. |
int |
getArity()
Return the value defined by the method used to construct the object
(number of parameters of the method, or 1 if the method is a "varargs"
form).
|
java.lang.String |
getFunctionName() |
int |
getLength()
Return the same value as
getArity(). |
java.lang.reflect.Member |
getMethodOrConstructor()
Get Java method or constructor this function represent.
|
static int |
getTypeTag(java.lang.Class<?> type) |
construct, execIdCall, fillConstructorProperties, findInstanceIdInfo, findPrototypeId, getClassName, getClassPrototype, getInstanceIdName, getInstanceIdValue, getMaxInstanceId, getPrototypeProperty, getTypeOf, hasInstance, hasPrototypeProperty, initPrototypeId, setImmunePrototypeProperty, setInstanceIdValueactivatePrototypeMap, addIdFunctionProperty, defaultGet, defaultPut, defineOwnProperty, delete, exportAsJSClass, get, getAttributes, getOwnPropertyDescriptor, has, hasPrototypeMap, incompatibleCallError, initPrototypeConstructor, initPrototypeMethod, initPrototypeValue, instanceIdInfo, put, setAttributes, setInstanceIdAttributesapplyDescriptorToAttributeBitset, associateValue, avoidObjectDetection, buildDataDescriptor, callMethod, callMethod, checkPropertyChange, checkPropertyDefinition, defineClass, defineClass, defineClass, defineConst, defineConstProperty, defineFunctionProperties, defineOwnProperties, defineOwnProperty, defineProperty, defineProperty, defineProperty, defineProperty, delete, deleteProperty, deleteProperty, ensureScriptable, ensureScriptableObject, equivalentValues, get, get, getAllIds, getArrayPrototype, getAssociatedValue, getAttributes, getAttributes, getAttributes, getClassPrototype, getDefaultValue, getDefaultValue, getFunctionPrototype, getGetterOrSetter, getIds, getObjectPrototype, getParentScope, getProperty, getProperty, getPropertyIds, getPrototype, getSlot, getTopLevelScope, getTopScopeValue, getTypedProperty, getTypedProperty, has, hasProperty, hasProperty, isAccessorDescriptor, isConst, isDataDescriptor, isEmpty, isExtensible, isFalse, isGenericDescriptor, isGetterOrSetter, isReadOnlySettable, isSealed, isTrue, preventExtensions, put, putConst, putConstProperty, putProperty, putProperty, redefineProperty, sameValue, sealObject, setAttributes, setAttributes, setAttributes, setGetterOrSetter, setParentScope, setPrototype, sizeclone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitdelete, delete, get, get, getDefaultValue, getIds, getParentScope, getPrototype, has, has, put, put, setParentScope, setPrototypepublic static final int JAVA_UNSUPPORTED_TYPE
public static final int JAVA_STRING_TYPE
public static final int JAVA_INT_TYPE
public static final int JAVA_BOOLEAN_TYPE
public static final int JAVA_DOUBLE_TYPE
public static final int JAVA_SCRIPTABLE_TYPE
public static final int JAVA_OBJECT_TYPE
public FunctionObject(java.lang.String name,
java.lang.reflect.Member methodOrConstructor,
Scriptable scope)
The member argument must be either a
java.lang.reflect.Method or a java.lang.reflect.Constructor and must
match one of two forms.
The first form is a member with zero or more parameters of the following types: Object, String, boolean, Scriptable, int, or double. The Long type is not supported because the double representation of a long (which is the EMCA-mandated storage type for Numbers) may lose precision. If the member is a Method, the return value must be void or one of the types allowed for parameters.
The runtime will perform appropriate conversions based upon the type of the parameter. A parameter type of Object specifies that no conversions are to be done. A parameter of type String will use Context.toString to convert arguments. Similarly, parameters of type double, boolean, and Scriptable will cause Context.toNumber, Context.toBoolean, and Context.toObject, respectively, to be called.
If the method is not static, the Java 'this' value will correspond to the JavaScript 'this' value. Any attempt to call the function with a 'this' value that is not of the right Java type will result in an error.
The second form is the variable arguments (or "varargs") form. If the FunctionObject will be used as a constructor, the member must have the following parameters
(Context cx, Object[] args, Function ctorObj,
boolean inNewExpr)
and if it is a Method, be static and return an Object result.
Otherwise, if the FunctionObject will not be used to define a constructor, the member must be a static Method with parameters
(Context cx, Scriptable thisObj, Object[] args,
Function funObj)
and an Object result.
When the function varargs form is called as part of a function call, the
args parameter contains the arguments, with
thisObj set to the JavaScript 'this' value.
funObj is the function object for the invoked function.
When the constructor varargs form is called or invoked while evaluating a
new expression, args contains the arguments,
ctorObj refers to this FunctionObject, and
inNewExpr is true if and only if a new
expression caused the call. This supports defining a function that has
different behavior when called as a constructor than when invoked as a
normal function call. (For example, the Boolean constructor, when called
as a function, will convert to boolean rather than creating a new
object.)
name - the name of the functionmethodOrConstructor - a java.lang.reflect.Method or a java.lang.reflect.Constructor
that defines the objectscope - enclosing scope of functionScriptablepublic static int getTypeTag(java.lang.Class<?> type)
JAVA_UNSUPPORTED_TYPE if the convertion is not possiblepublic static java.lang.Object convertArg(Context cx, Scriptable scope, java.lang.Object arg, int typeTag)
public int getArity()
getArity in class BaseFunctionpublic int getLength()
getArity().getLength in class BaseFunctionpublic java.lang.String getFunctionName()
getFunctionName in class BaseFunctionpublic java.lang.reflect.Member getMethodOrConstructor()
public void addAsConstructor(Scriptable scope, Scriptable prototype)
Sets up the "prototype" and "constructor" properties. Also calls
setParent and setPrototype with appropriate values. Then adds the
function object as a property of the given scope, using
prototype.getClassName() as the name of the property.
scope - the scope in which to define the constructor (typically the
global object)prototype - the prototype objectScriptable.setParentScope(net.sourceforge.htmlunit.corejs.javascript.Scriptable),
Scriptable.setPrototype(net.sourceforge.htmlunit.corejs.javascript.Scriptable),
Scriptable.getClassName()public static java.lang.Object convertArg(Context cx, Scriptable scope, java.lang.Object arg, java.lang.Class<?> desired)
getTypeTag(Class) and
convertArg(Context, Scriptable, Object, int) for
type conversion.public java.lang.Object call(Context cx, Scriptable scope, Scriptable thisObj, java.lang.Object[] args)
Implements Function.call.
call in interface Callablecall in interface Functioncall in class BaseFunctioncx - the current Context for this threadscope - 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 objectargs - the array of argumentsFunction.call(Context,
Scriptable, Scriptable, Object[])public Scriptable createObject(Context cx, Scriptable scope)
Scriptable instance using the default constructor for
the class of the underlying Java method. Return null to indicate that the
call method should be used to create new objects.createObject in class BaseFunction