Subj : problem on the getter of object's property To : netscape.public.mozilla.jseng From : "lyg" Date : Tue Feb 10 2004 04:09 pm when i get one option's value prperty , why the GetOptionProperty function is not called? /*declare option object's property GETTER*/ static JSBool GetOptionProperty (JSContext *cx, JSObject *obj, jsval id, jsval *vp); /*declare option object's Selected property SETTER*/ static JSBool SetOptionSelected (JSContext *cx, JSObject *obj, jsval id, jsval *vp); /*定义Option类*/ static JSClass OptionClass = { "Option",0, JS_PropertyStub,JS_PropertyStub, JS_PropertyStub, JS_PropertyStub, JS_EnumerateStub, JS_ResolveStub, JS_ConvertStub, JS_FinalizeStub, JSCLASS_NO_OPTIONAL_MEMBERS }; enum OPTION_PROP_ID { OPTION_SYSID = 0, OPTION_NAME, OPTION_DEFSELECTED, OPTION_SELECTED, OPTION_VALUE, OPTION_TEXT, }; /*定义Option类的属性数组*/ static JSPropertySpec OptionProperties[] = { {"name", OPTION_NAME, JSPROP_ENUMERATE|JSPROP_READONLY, GetOptionProperty}, {"defaultSelected", OPTION_DEFSELECTED, JSPROP_ENUMERATE|JSPROP_READONLY, GetOptionProperty}, {"selected", OPTION_SELECTED, JSPROP_ENUMERATE,GetOptionProperty,SetOptionSelected}, {"value", OPTION_VALUE, JSPROP_ENUMERATE|JSPROP_READONLY, GetOptionProperty}, {"text", OPTION_TEXT, JSPROP_ENUMERATE|JSPROP_READONLY, GetOptionProperty}, {0} }; static JSBool Option(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) { if (0 < argc && 5 > argc) { char *temp; temp = JS_GetStringBytes( JSVAL_TO_STRING(argv[0]) ); JS_SetProperty(cx, obj, "text", &argv[0]); if (argc > 1) JS_SetProperty(cx, obj, "value", &argv[1]); if (argc > 2) JS_SetProperty(cx, obj, "defaultSelected", &argv[2]); if (argc > 3) JS_SetProperty(cx, obj, "selected", &argv[3]); return JS_TRUE; } else return JS_FALSE; } JSObject * js_InitOptionClass(JSContext *cx, JSObject *obj) { JSObject *proto; proto = JS_InitClass(cx, obj, NULL, &OptionClass, Option, 4, NULL, NULL, OptionProperties, NULL); if (!proto) return NULL; OBJ_SET_SLOT(cx, proto, JSSLOT_PRIVATE, JSVAL_FALSE); return proto; } /*declare option对象属性的GETTER*/ static JSBool GetOptionProperty (JSContext *cx, JSObject *obj, jsval id, jsval *vp) { int i = 9; return JS_TRUE; } /*declare option对象Selected属性的SETTER*/ static JSBool SetOptionSelected (JSContext *cx, JSObject *obj, jsval id, jsval *vp) { int i = 9; return JS_TRUE; } .