org.mozilla.javascript
public class FunctionObject extends BaseFunction
Field Summary | |
---|---|
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 |
Constructor Summary | |
---|---|
FunctionObject(String name, Member methodOrConstructor, Scriptable scope)
Create a JavaScript function object from a Java method.
|
Method Summary | |
---|---|
void | addAsConstructor(Scriptable scope, Scriptable prototype)
Define this function as a JavaScript constructor.
|
Object | call(Context cx, Scriptable scope, Scriptable thisObj, Object[] args)
Performs conversions on argument types if needed and
invokes the underlying Java method or constructor.
|
static Object | convertArg(Context cx, Scriptable scope, Object arg, int typeTag) |
static Object | convertArg(Context cx, Scriptable scope, Object arg, Class desired) |
Scriptable | createObject(Context cx, Scriptable scope)
Return new {@link 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). |
String | getFunctionName() |
int | getLength()
Return the same value as {@link #getArity()}. |
Member | getMethodOrConstructor()
Get Java method or constructor this function represent. |
static int | getTypeTag(Class type) |
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, withthisObj
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, andinNewExpr
is true if and only if anew
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.)
Parameters: name the name of the function methodOrConstructor a java.lang.reflect.Method or a java.lang.reflect.Constructor that defines the object scope enclosing scope of function
See Also: Scriptable
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.
Parameters: scope the scope in which to define the constructor (typically the global object) prototype the prototype object
See Also: Scriptable Scriptable Scriptable
Implements Function.call.
Deprecated: Use {@link #getTypeTag(Class)} and {@link #convertArg(Context, Scriptable, Object, int)} for type convertion.
Returns: One of JAVA_*_TYPE constants to indicate desired type or {@link #JAVA_UNSUPPORTED_TYPE} if the convertion is not possible