¡¡¡¡ÔÚÕâÀïÎÒÃǽ«´æÈ¡Æ÷ÊôÐÔµÄgetterºÍsetter·½·¨¿´³ÉÊÇÊôÐÔµÄÌØÐÔ¡£°´ÕÕÕâ¸öÂß¼£¬ÎÒÃÇÒ²¿ÉÒÔ°ÑÊôÐÔµÄֵͬÑù¿´×öÊôÐÔµÄÌØÐÔ¡£Òò´Ë£¬¿ÉÒÔÈÏΪÊôÐÔ°üº¬Ò»¸öÃû×ÖºÍ4¸öÌØÐÔ¡£Êý¾ÝÊôÐÔµÄ4¸öÌØÐÔ·Ö±ðÊÇËüµÄÖµ£¨value£©¡¢¿ÉдÐÔ£¨writable£©¡¢¿Éö¾ÙÐÔ£¨enumerable£©ºÍ¿ÉÅäÖÃÐÔ£¨configurable£©¡£´æÈ¡Æ÷ÊôÐÔ²»¾ßÓÐÖµÌØÐԺͿÉдÐÔËüÃǵĿÉдÐÔÊÇÓÉsetter·½·¨ÊÇ·ñ´æÔÚÓë·ñ¾ö¶¨µÄ¡£Òò´Ë´æÈ¡Æ÷ÊôÐÔµÄ4¸öÌØÐÔÊǶÁÈ¡£¨get£©¡¢Ð´È루set£©¡¢¿Éö¾ÙÐԺͿÉÅäÖÃÐÔ¡£
¡¡¡¡ÎªÁËʵÏÖÊôÐÔÌØÐԵIJéѯºÍÉèÖòÙ×÷£¬ECMAScript 5Öж¨ÒåÁËÒ»¸öÃûΪ“ÊôÐÔÃèÊö·û”£¨property descriptor£©µÄ¶ÔÏó£¬Õâ¸ö¶ÔÏó´ú±íÄÇ4¸öÌØÐÔ¡£ÃèÊö·û¶ÔÏóµÄÊôÐÔºÍËüÃÇËùÃèÊöµÄÊôÐÔÌØÐÔÊÇͬÃûµÄ¡£Òò´Ë£¬Êý¾ÝÊôÐÔµÄÃèÊö·û¶ÔÏóµÄÊôÐÔÓÐvalue¡¢writable¡¢enumerableºÍconfigurable¡£´æÈ¡Æ÷ÊôÐÔµÄÃèÊö·û¶ÔÏóÔòÓÃgetÊôÐÔºÍsetÊôÐÔ´úÌævalueºÍwritable¡£ÆäÖÐwritable¡¢enumerableºÍconfigurable¶¼ÊDz¼¶ûÖµ£¬µ±È»£¬getÊôÐÔºÍsetÊôÐÔÊǺ¯ÊýÖµ¡£Í¨¹ýµ÷ÓÃObject.getOwnPropertyDescriptor()¿ÉÒÔ»ñµÃij¸ö¶ÔÏóÌØ¶¨ÊôÐÔµÄÊôÐÔÃèÊö·û£º
¡¡¡¡´Óº¯ÊýÃû×־ͿÉÒÔ¿´³ö£¬Object.getOwnPropertyDescriptor()Ö»Äܵõ½×ÔÓÐÊôÐÔµÄÃèÊö·û£¬¶ÔÓڼ̳ÐÊôÐԺͲ»´æÔÚµÄÊôÐÔËü¶¼·µ»Øundefined¡£ÒªÏë»ñµÃ¼Ì³ÐÊôÐÔµÄÌØÐÔ£¬ÐèÒª±éÀúÔÐÍÁ´£¨²»»á±éÀúÔÐÍÁ´£¿²»Òª¼±£¬ÏÂÃæ»á˵µ½µÄ£©¡£
¡¡¡¡ÒªÏëÉèÖÃÊôÐÔµÄÌØÐÔ£¬»òÕßÏëÈÃн¨ÊôÐÔ¾ßÓÐijÖÖÌØÐÔ£¬ÔòÐèÒªµ÷ÓÃObject.definePeoperty()£¬´«ÈëÐèÒªÐ޸ĵĶÔÏó¡¢Òª´´½¨»òÐ޸ĵÄÊôÐÔµÄÃû³ÆÒÔ¼°ÊôÐÔÃèÊö·û¶ÔÏó£º
¡¡¡¡¿ÉÒÔ¿´µ½£º
¡¡¡¡¡¡¡¡¢Ù´«ÈëObject.defineProperty()µÄÊôÐÔÃèÊö·û¶ÔÏ󲻱ذüº¬ËùÓÐ4¸öÌØÐÔ£»
¡¡¡¡¡¡¡¡¢Ú¿ÉдÐÔ¿ØÖÆ×ŶÔÊôÐÔÖµµÄÐ޸ģ»
¡¡¡¡¡¡¡¡¢Û¿Éö¾ÙÐÔ¿ØÖÆ×ÅÊôÐÔÊÇ·ñ¿Éö¾Ù£¨Ã¶¾ÙÊôÐÔ£¬ÏÂÃæ»á˵µÄ£©£»
¡¡¡¡¡¡¡¡¢Ü¿ÉÅäÖÃÐÔ¿ØÖÆ×Å¶ÔÆäËûÌØÐÔ£¨°üÀ¨Ç°ÃæËµ¹ýµÄÊôÐÔÊÇ·ñ¿ÉÒÔɾ³ý£©µÄÐ޸ģ»
¡¡¡¡Èç¹ûҪͬʱÐ޸Ļò´´½¨¶à¸öÊôÐÔ£¬ÔòÐèҪʹÓÃObject.defineProperties()¡£µÚÒ»¸ö²ÎÊýÊÇÒªÐ޸ĵĶÔÏ󣬵ڶþ¸ö²ÎÊýÊÇÒ»¸öÓ³Éä±í£¬Ëü°üº¬ÒªÐ½¨»òÐ޸ĵÄÊôÐÔµÄÃû³Æ£¬ÒÔ¼°ËüÃǵÄÊôÐÔÃèÊö·û£¬ÀýÈ磺
var p = Object.defineProperties({},{ x: {value: 1, writable: true, enumerable: true, configurable: true}, y: {value: 2, writable: true, enumerable: true, configurable: true}, r: {get: function(){return 88;}, set: function(newvalue){this.x =newvalue;},enumerable: true, configurable: true}, greet: {value: function(){console.log('hello,world');}, writable: true, enumerable: true, configurable: true} });
¡¡¡¡ÏàÐÅÄãÒ²ÒѾ´ÓʵÀýÖп´³ö£ºObject.defineProperty()ºÍObject.defineProperties()¶¼·µ»ØÐ޸ĺóµÄ¶ÔÏó¡£
¡¡¡¡Ç°ÃæÎÒÃÇ˵getterºÍsetter´æÈ¡Æ÷ÊôÐÔʱʹÓöÔÏóÖ±½ÓÁ¿Óï·¨¸øÐ¶ÔÏó¶¨Òå´æÈ¡Æ÷ÊôÐÔ£¬µ«²¢²»ÄܲéѯÊôÐÔµÄgetterºÍsetter·½·¨»ò¸øÒÑÓеĶÔÏóÌí¼ÓеĴæÈ¡Æ÷ÊôÐÔ¡£ÔÚECMAScript 5ÖУ¬¾Í¿ÉÒÔͨ¹ýObject.getOwnPropertyDescriptor()ºÍObject.defineProperty()À´Íê³ÉÕâЩ¹¤×÷À²£¡µ«ÔÚECMAScript 5֮ǰ£¬´ó¶àÊýä¯ÀÀÆ÷£¨IE³ýÍâÀ²£©ÒѾ֧³Ö¶ÔÏóÖ±½ÓÁ¿Óï·¨ÖеÄgetºÍsetд·¨ÁË¡£ËùÒÔÕâЩä¯ÀÀÆ÷»¹ÌṩÁ˷DZê×¼µÄÀÏʽAPIÓÃÀ´²éѯºÍÉèÖÃgetterºÍsetter¡£ÕâЩAPIÓÐ4¸ö·½·¨×é³É£¬ËùÓжÔÏó¶¼ÓµÓÐÕâЩ·½·¨¡£__lookupGetter__()ºÍ__lookupSetter__()ÓÃÒÔ·µ»ØÒ»¸öÃüÃûÊôÐÔµÄgetterºÍsetter·½·¨¡£__defineGetter__()ºÍ__defineSetter__()ÓÃÒÔ¶¨ÒågetterºÍsetter¡£ÕâËĸö·½·¨¶¼ÊÇÒÔÁ½ÌõÏ»®Ïß×öǰ׺£¬Á½ÌõÏ»®Ïß×öºó׺£¬ÒÔ±íÃ÷ËüÃÇÊǷDZê×¼·½·¨¡£ÏÂÃæÊÇËüÃÇÓ÷¨£º
Æß.¼ì²âÊôÐÔ
¡¡JavaScript¶ÔÏó¿ÉÒÔ¿´×öÊôÐԵļ¯ºÏ£¬ÄÇôÎÒÃÇÓÐʱ¾ÍÐèÒªÅжÏij¸öÊôÐÔÊÇ·ñ´æÔÚÓÚij¸ö¶ÔÏóÖУ¬Õâ¾ÍÊǽÓÏÂÀ´ÒªËµµÄ¼ì²âÊôÐÔ¡£
¡¡ ¼ì²âÒ»¸ö¶ÔÏóµÄÊôÐÔÒ²ÓÐÈýÖÖ·½·¨£¬ÏÂÃæ¾ÍÀ´Ïêϸ˵˵ËüÃǵÄ×÷Óü°Çø±ð£¡
1.inÔËËã·û
¡¡¡¡inÔËËã·û×ó²àÊÇÊôÐÔÃû£¨×Ö·û´®£©£¬ÓÒ²àÊǶÔÏó¡£Èç¹û¶ÔÏóµÄ×ÔÓÐÊôÐÔ»ò¼Ì³ÐÊôÐÔÖаüº¬Õâ¸öÊôÐÔÔò·µ»Øtrue£¬·ñÔò·µ»Øfalse¡£
¡¡¡¡ÎªÁËÊÔÑ飬ÎÒÃÇÏȸø¶ÔÏóObject.prototypeÌí¼ÓÒ»¸ö¿Éö¾ÙÊôÐÔm£¬Ò»¸ö²»¿Éö¾ÙÊôÐÔn£»È»ºó£¬¸ø¶ÔÏóobj¶¨ÒåÁ½¸ö¿Éö¾ÙÊôÐÔx,Ò»¸ö²»¿Éö¾ÙÊôÐÔy£¬²¢ÇÒ¶ÔÏóobjÊÇͨ¹ý¶ÔÏóÖ±½ÓÁ¿ÐÎʽ´´½¨µÄ£¬¼Ì³ÐÁËObject.prototype¡£ÏÂÃæ¿´ÊµÀý£º
¡¡¡¡´ÓÔËÐнá¹û¿ÉÒÔ¿´³ö£ºinÔËËã·û×ó²àÊÇÊôÐÔÃû£¨×Ö·û´®£©£¬ÓÒ²àÊǶÔÏó¡£Èç¹û¶ÔÏóµÄ×ÔÓÐÊôÐÔ»ò¼Ì³ÐÊôÐÔ£¨²»ÂÛÕâЩÊôÐÔÊÇ·ñ¿Éö¾Ù£©Öаüº¬Õâ¸öÊôÐÔÔò·µ»Øtrue£¬·ñÔò·µ»Øfalse¡£
2.hasOwnProperty()
¡¡¡¡¶ÔÏóµÄhasOwnProperty()·½·¨ÓÃÀ´¼ì²â¸ø¶¨µÄÃû×ÖÊÇ·ñÊǶÔÏóµÄ×ÔÓÐÊôÐÔ£¨²»ÂÛÕâЩÊôÐÔÊÇ·ñ¿Éö¾Ù£©£¬¶ÔÓڼ̳ÐÊôÐÔËü½«·µ»Øfalse¡£ÏÂÃæ¿´ÊµÀý£º
3.propertyIsEnumerable()
¡¡¡¡propertyIsEnumerable()ÊÇhasOwnProperty()µÄÔöÇ¿°æ£¬Ö»Óмì²âµ½ÊÇ×ÔÓÐÊôÐÔÇÒÕâ¸öÊôÐÔ¿Éö¾ÙÐÔΪtrueʱËü²Å·µ»Øtrue¡£»¹ÊÇʵÀý£º
°Ë.ö¾ÙÊôÐÔ
¡¡