This is an archived page. It's not actively maintained.


This article covers features introduced in SpiderMonkey 38

Create a new Function object from an existing JSFunction.


JSObject *
JS::CloneFunctionObject(JSContext *cx, JS::HandleObject funobj);

JSObject *
JS::CloneFunctionObject(JSContext *cx, JS::HandleObject funobj,
                        JS::AutoObjectVector &scopeChain);
Name Type Description
cx JSContext * Pointer to a JS context from which to derive runtime information. Requires request. In a JS_THREADSAFE build, the caller must be in a request on this JSContext.
funobj JS::HandleObject The Function to clone.
scopeChain JS::AutoObjectVector The new function's scope chain.


JS::CloneFunctionObject creates a new function object from funobj. The new object has the same code and argument list as funobj. If scopeChain is supplied, it uses scopeChain as its enclosing scope. If scopeChain is omitted, it creates a new function object in cx's global. This can be helpful if funobj is an extant function that you wish to use as if it were enclosed by a newly-created global object.

The new object's prototype is Function.prototype; JS_NewObject : Choosing a Default Prototype explains exactly how this is computed. JS::CloneFunctionObject takes care to choose a prototype that shares a global object with the given parent whenever possible.

funobj must be a pointer to a JavaScript function object (see JS_ObjectIsFunction).

On success, JS::CloneFunctionObject returns a pointer to the newly created object. If the class of funobj is not Function, then JS::CloneFunctionObject returns funobj itself. On failure, it returns NULL.

See Also