Determine if an object is an instance of a specified JSClass.

Syntax

bool
JS_InstanceOf(JSContext *cx, JS::Handle<JSObject*> obj, const JSClass *clasp,
              JS::CallArgs *args); // Added in SpiderMonkey 38

bool
JS_InstanceOf(JSContext *cx, JS::Handle<JSObject*> obj, const JSClass *clasp,
              jsval *argv); // Obsolete since JSAPI 32
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.
obj JS::Handle&lt;JSObject*&gt; Object to test.
clasp JSClass * Class against which to test the object.
args JS::CallArgs * Optional pointer to arguments. If non-null, report an error if obj is not of type clasp. Added in SpiderMonkey 38
argv jsval * Optional argument vector. If non-null, report an error if obj is not of type clasp. argv must be the argv argument passed from the engine to a JSNative callback, JS_ARGV(cx, rv) in a JSFastNative callback, or NULL. Obsolete since JSAPI 32

Description

JS_InstanceOf can be used to check whether an object obj is of a particular JSClass. To use it this way, pass NULL for argv. JS_InstanceOf returns true if obj is of the given class and false otherwise. That is, it returns JS_GetClass(obj) == clasp.

JS_InstanceOf can also be used in native functions to check the class of an argument when a particular class is required. To use it this way, pass the arguments provided by the engine for args with JS::CallArgsFromVp(argc, vp). When args is non-null, JS_InstanceOf behaves as follows. If obj is of the given class, it returns true. Otherwise, it returns false; it also reports a TypeError containing the function's name.

Note that JS_InstanceOf is not the equivalent of the JavaScript instanceof keyword, which examines constructor properties along the prototype chain. JS_HasInstance is similar to instanceof.

See Also