📄 jsapi.h
字号:
/* * Returns the external-string finalizer index for this string, or -1 if it is * an "internal" (native to JS engine) string. */extern JS_PUBLIC_API(intN)JS_GetExternalStringGCType(JSRuntime *rt, JSString *str);/************************************************************************//* * Classes, objects, and properties. *//* For detailed comments on the function pointer types, see jspubtd.h. */struct JSClass { const char *name; uint32 flags; /* Mandatory non-null function pointer members. */ JSPropertyOp addProperty; JSPropertyOp delProperty; JSPropertyOp getProperty; JSPropertyOp setProperty; JSEnumerateOp enumerate; JSResolveOp resolve; JSConvertOp convert; JSFinalizeOp finalize; /* Optionally non-null members start here. */ JSGetObjectOps getObjectOps; JSCheckAccessOp checkAccess; JSNative call; JSNative construct; JSXDRObjectOp xdrObject; JSHasInstanceOp hasInstance; JSMarkOp mark; jsword spare;};#define JSCLASS_HAS_PRIVATE (1<<0) /* objects have private slot */#define JSCLASS_NEW_ENUMERATE (1<<1) /* has JSNewEnumerateOp hook */#define JSCLASS_NEW_RESOLVE (1<<2) /* has JSNewResolveOp hook */#define JSCLASS_PRIVATE_IS_NSISUPPORTS (1<<3) /* private is (nsISupports *) */#define JSCLASS_SHARE_ALL_PROPERTIES (1<<4) /* all properties are SHARED *//* * To reserve slots fetched and stored via JS_Get/SetReservedSlot, bitwise-or * JSCLASS_HAS_RESERVED_SLOTS(n) into the initializer for JSClass.flags, where * n is a constant in [1, 255]. Reserved slots are indexed from 0 to n-1. */#define JSCLASS_RESERVED_SLOTS_SHIFT 8 /* room for 8 flags below */#define JSCLASS_RESERVED_SLOTS_WIDTH 8 /* and 16 above this field */#define JSCLASS_RESERVED_SLOTS_MASK JS_BITMASK(JSCLASS_RESERVED_SLOTS_WIDTH)#define JSCLASS_HAS_RESERVED_SLOTS(n) (((n) & JSCLASS_RESERVED_SLOTS_MASK) \ << JSCLASS_RESERVED_SLOTS_SHIFT)#define JSCLASS_RESERVED_SLOTS(clasp) (((clasp)->flags \ >> JSCLASS_RESERVED_SLOTS_SHIFT) \ & JSCLASS_RESERVED_SLOTS_MASK)/* Initializer for unused members of statically initialized JSClass structs. */#define JSCLASS_NO_OPTIONAL_MEMBERS 0,0,0,0,0,0,0,0/* For detailed comments on these function pointer types, see jspubtd.h. */struct JSObjectOps { /* Mandatory non-null function pointer members. */ JSNewObjectMapOp newObjectMap; JSObjectMapOp destroyObjectMap; JSLookupPropOp lookupProperty; JSDefinePropOp defineProperty; JSPropertyIdOp getProperty; JSPropertyIdOp setProperty; JSAttributesOp getAttributes; JSAttributesOp setAttributes; JSPropertyIdOp deleteProperty; JSConvertOp defaultValue; JSNewEnumerateOp enumerate; JSCheckAccessIdOp checkAccess; /* Optionally non-null members start here. */ JSObjectOp thisObject; JSPropertyRefOp dropProperty; JSNative call; JSNative construct; JSXDRObjectOp xdrObject; JSHasInstanceOp hasInstance; JSSetObjectSlotOp setProto; JSSetObjectSlotOp setParent; JSMarkOp mark; JSFinalizeOp clear; JSGetRequiredSlotOp getRequiredSlot; JSSetRequiredSlotOp setRequiredSlot;};/* * Classes that expose JSObjectOps via a non-null getObjectOps class hook may * derive a property structure from this struct, return a pointer to it from * lookupProperty and defineProperty, and use the pointer to avoid rehashing * in getAttributes and setAttributes. * * The jsid type contains either an int jsval (see JSVAL_IS_INT above), or an * internal pointer that is opaque to users of this API, but which users may * convert from and to a jsval using JS_ValueToId and JS_IdToValue. */struct JSProperty { jsid id;};struct JSIdArray { jsint length; jsid vector[1]; /* actually, length jsid words */};extern JS_PUBLIC_API(void)JS_DestroyIdArray(JSContext *cx, JSIdArray *ida);extern JS_PUBLIC_API(JSBool)JS_ValueToId(JSContext *cx, jsval v, jsid *idp);extern JS_PUBLIC_API(JSBool)JS_IdToValue(JSContext *cx, jsid id, jsval *vp);#define JSRESOLVE_QUALIFIED 0x01 /* resolve a qualified property id */#define JSRESOLVE_ASSIGNING 0x02 /* resolve on the left of assignment */extern JS_PUBLIC_API(JSBool)JS_PropertyStub(JSContext *cx, JSObject *obj, jsval id, jsval *vp);extern JS_PUBLIC_API(JSBool)JS_EnumerateStub(JSContext *cx, JSObject *obj);extern JS_PUBLIC_API(JSBool)JS_ResolveStub(JSContext *cx, JSObject *obj, jsval id);extern JS_PUBLIC_API(JSBool)JS_ConvertStub(JSContext *cx, JSObject *obj, JSType type, jsval *vp);extern JS_PUBLIC_API(void)JS_FinalizeStub(JSContext *cx, JSObject *obj);struct JSConstDoubleSpec { jsdouble dval; const char *name; uint8 flags; uint8 spare[3];};/* * To define an array element rather than a named property member, cast the * element's index to (const char *) and initialize name with it, and set the * JSPROP_INDEX bit in flags. */struct JSPropertySpec { const char *name; int8 tinyid; uint8 flags; JSPropertyOp getter; JSPropertyOp setter;};struct JSFunctionSpec { const char *name; JSNative call; uint8 nargs; uint8 flags; uint16 extra; /* number of arg slots for local GC roots */};extern JS_PUBLIC_API(JSObject *)JS_InitClass(JSContext *cx, JSObject *obj, JSObject *parent_proto, JSClass *clasp, JSNative constructor, uintN nargs, JSPropertySpec *ps, JSFunctionSpec *fs, JSPropertySpec *static_ps, JSFunctionSpec *static_fs);#ifdef JS_THREADSAFEextern JS_PUBLIC_API(JSClass *)JS_GetClass(JSContext *cx, JSObject *obj);#define JS_GET_CLASS(cx,obj) JS_GetClass(cx, obj)#elseextern JS_PUBLIC_API(JSClass *)JS_GetClass(JSObject *obj);#define JS_GET_CLASS(cx,obj) JS_GetClass(obj)#endifextern JS_PUBLIC_API(JSBool)JS_InstanceOf(JSContext *cx, JSObject *obj, JSClass *clasp, jsval *argv);extern JS_PUBLIC_API(void *)JS_GetPrivate(JSContext *cx, JSObject *obj);extern JS_PUBLIC_API(JSBool)JS_SetPrivate(JSContext *cx, JSObject *obj, void *data);extern JS_PUBLIC_API(void *)JS_GetInstancePrivate(JSContext *cx, JSObject *obj, JSClass *clasp, jsval *argv);extern JS_PUBLIC_API(JSObject *)JS_GetPrototype(JSContext *cx, JSObject *obj);extern JS_PUBLIC_API(JSBool)JS_SetPrototype(JSContext *cx, JSObject *obj, JSObject *proto);extern JS_PUBLIC_API(JSObject *)JS_GetParent(JSContext *cx, JSObject *obj);extern JS_PUBLIC_API(JSBool)JS_SetParent(JSContext *cx, JSObject *obj, JSObject *parent);extern JS_PUBLIC_API(JSObject *)JS_GetConstructor(JSContext *cx, JSObject *proto);extern JS_PUBLIC_API(JSObject *)JS_NewObject(JSContext *cx, JSClass *clasp, JSObject *proto, JSObject *parent);extern JS_PUBLIC_API(JSObject *)JS_ConstructObject(JSContext *cx, JSClass *clasp, JSObject *proto, JSObject *parent);extern JS_PUBLIC_API(JSObject *)JS_DefineObject(JSContext *cx, JSObject *obj, const char *name, JSClass *clasp, JSObject *proto, uintN attrs);extern JS_PUBLIC_API(JSBool)JS_DefineConstDoubles(JSContext *cx, JSObject *obj, JSConstDoubleSpec *cds);extern JS_PUBLIC_API(JSBool)JS_DefineProperties(JSContext *cx, JSObject *obj, JSPropertySpec *ps);extern JS_PUBLIC_API(JSBool)JS_DefineProperty(JSContext *cx, JSObject *obj, const char *name, jsval value, JSPropertyOp getter, JSPropertyOp setter, uintN attrs);/* * Determine the attributes (JSPROP_* flags) of a property on a given object. * * If the object does not have a property by that name, *foundp will be * JS_FALSE and the value of *attrsp is undefined. */extern JS_PUBLIC_API(JSBool)JS_GetPropertyAttributes(JSContext *cx, JSObject *obj, const char *name, uintN *attrsp, JSBool *foundp);/* * Set the attributes of a property on a given object. * * If the object does not have a property by that name, *foundp will be * JS_FALSE and nothing will be altered. */extern JS_PUBLIC_API(JSBool)JS_SetPropertyAttributes(JSContext *cx, JSObject *obj, const char *name, uintN attrs, JSBool *foundp);extern JS_PUBLIC_API(JSBool)JS_DefinePropertyWithTinyId(JSContext *cx, JSObject *obj, const char *name, int8 tinyid, jsval value, JSPropertyOp getter, JSPropertyOp setter, uintN attrs);extern JS_PUBLIC_API(JSBool)JS_AliasProperty(JSContext *cx, JSObject *obj, const char *name, const char *alias);extern JS_PUBLIC_API(JSBool)JS_LookupProperty(JSContext *cx, JSObject *obj, const char *name, jsval *vp);extern JS_PUBLIC_API(JSBool)JS_GetProperty(JSContext *cx, JSObject *obj, const char *name, jsval *vp);extern JS_PUBLIC_API(JSBool)JS_SetProperty(JSContext *cx, JSObject *obj, const char *name, jsval *vp);extern JS_PUBLIC_API(JSBool)JS_DeleteProperty(JSContext *cx, JSObject *obj, const char *name);extern JS_PUBLIC_API(JSBool)JS_DeleteProperty2(JSContext *cx, JSObject *obj, const char *name, jsval *rval);extern JS_PUBLIC_API(JSBool)JS_DefineUCProperty(JSContext *cx, JSObject *obj, const jschar *name, size_t namelen, jsval value, JSPropertyOp getter, JSPropertyOp setter, uintN attrs);/* * Determine the attributes (JSPROP_* flags) of a property on a given object. * * If the object does not have a property by that name, *foundp will be * JS_FALSE and the value of *attrsp is undefined. */extern JS_PUBLIC_API(JSBool)JS_GetUCPropertyAttributes(JSContext *cx, JSObject *obj, const jschar *name, size_t namelen, uintN *attrsp, JSBool *foundp);/* * Set the attributes of a property on a given object. * * If the object does not have a property by that name, *foundp will be * JS_FALSE and nothing will be altered. */extern JS_PUBLIC_API(JSBool)JS_SetUCPropertyAttributes(JSContext *cx, JSObject *obj, const jschar *name, size_t namelen, uintN attrs, JSBool *foundp);extern JS_PUBLIC_API(JSBool)JS_DefineUCPropertyWithTinyId(JSContext *cx, JSObject *obj, const jschar *name, size_t namelen, int8 tinyid, jsval value, JSPropertyOp getter, JSPropertyOp setter, uintN attrs);extern JS_PUBLIC_API(JSBool)JS_LookupUCProperty(JSContext *cx, JSObject *obj, const jschar *name, size_t namelen, jsval *vp);extern JS_PUBLIC_API(JSBool)JS_GetUCProperty(JSContext *cx, JSObject *obj, const jschar *name, size_t namelen, jsval *vp);extern JS_PUBLIC_API(JSBool)JS_SetUCProperty(JSContext *cx, JSObject *obj, const jschar *name, size_t namelen, jsval *vp);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -