JavaScript ES5 ¶ÔÏó·½·¨
ECMAScript 5 Ϊ JavaScript Ìí¼ÓÁË´óÁ¿ÐµĶÔÏó·½·¨¡£
ES5 еĶÔÏó·½·¨
// Ìí¼Ó»ò¸ü¸Ä¶ÔÏóÊôÐÔ Object.defineProperty(object, property, descriptor) // Ìí¼Ó»ò¸ü¸Ä¶à¸ö¶ÔÏóÊôÐÔ Object.defineProperties(object, descriptors) // ·ÃÎÊÊôÐÔ Object.getOwnPropertyDescriptor(object, property) // ÒÔÊý×é·µ»ØËùÓÐÊôÐÔ Object.getOwnPropertyNames(object) // ÒÔÊý×é·µ»ØËùÓпÉö¾ÙµÄÊôÐÔ Object.keys(object) // ·ÃÎÊÔÐÍ Object.getPrototypeOf(object) // ×èÖ¹Ïò¶ÔÏóÌí¼ÓÊôÐÔ Object.preventExtensions(object) // Èç¹û¿É½«ÊôÐÔÌí¼Óµ½¶ÔÏó£¬Ôò·µ»Ø true Object.isExtensible(object) // ·ÀÖ¹¸ü¸Ä¶ÔÏóÊôÐÔ£¨¶ø²»ÊÇÖµ£© Object.seal(object) // Èç¹û¶ÔÏó±»Ãܷ⣬Ôò·µ»Ø true Object.isSealed(object) // ·ÀÖ¹¶Ô¶ÔÏó½øÐÐÈκθü¸Ä Object.freeze(object) // Èç¹û¶ÔÏó±»¶³½á£¬Ôò·µ»Ø true Object.isFrozen(object)
¸ü¸ÄÊôÐÔÖµ
Óï·¨
Object.defineProperty(object, property, {value : value})
±¾Àý¸ü¸ÄÁËÊôÐÔÖµ£º
ʵÀý
var person = {
firstName: "Bill",
lastName : "Gates",
language : "EN"
};
// ¸ü¸ÄÊôÐÔ
Object.defineProperty(person, "language", {value : "ZH"});
¸ü¸ÄÔªÊý¾Ý
ES5 ÔÊÐí¸ü¸ÄÒÔÏÂÊôÐÔÔªÊý¾Ý£º
writable : true // ÊôÐÔÖµ¿ÉÐÞ¸Ä enumerable : true // ÊôÐÔ¿Éö¾Ù configurable : true // ÊôÐÔ¿ÉÖØÐÂÅäÖà writable : false // ÊôÐÔÖµ²»¿ÉÐÞ¸Ä enumerable : false // ÊôÐÔ²»¿Éö¾Ù configurable : false // ÊôÐÔ²»¿ÉÖØÐÂÅäÖÃ
ES5 ÔÊÐí¸ü¸Ä getter ºÍ setter£º
// ¶¨Òå getter get: function() { return language } // ¶¨Òå setter set: function(value) { language = value }
´ËÀýʹÓïÑÔΪֻ¶Á£º
Object.defineProperty(person, "language", {writable:false});
´ËÀýʹÓïÑÔ²»¿Éö¾Ù£º
Object.defineProperty(person, "language", {enumerable:false});
ÁгöËùÓÐÊôÐÔ
´ËÀýÁгö¶ÔÏóµÄËùÓÐÊôÐÔ£º
ʵÀý
var person = {
firstName: "Bill",
lastName : "Gates"
language : "EN"
};
Object.defineProperty(person, "language", {enumerable:false});
Object.getOwnPropertyNames(person); // ·µ»ØÊôÐÔÊý×é
Áгö¿Éö¾ÙµÄÊôÐÔ
´ËÀýÖ»Áгö¶ÔÏóµÄËùÓпÉö¾ÙÊôÐÔ£º
ʵÀý
var person = {
firstName: "Bill",
lastName : "Gates"
language : "EN"
};
Object.defineProperty(person, "language", {enumerable:false});
Object.keys(person); // ·µ»Ø¿Éö¾ÙÊôÐÔµÄÊý×é
Ìí¼ÓÊôÐÔ
´ËÀýÏò¶ÔÏóÌí¼ÓÐÂÊôÐÔ£º
ʵÀý
// ´´½¨¶ÔÏó var person = { firstName: "Bill", lastName : "Gates", language : "EN" }; // Ìí¼ÓÊôÐÔ Object.defineProperty(person, "year", {value:"2008"});
Ìí¼Ó Getter ºÍ Setter
Object.defineProperty() ·½·¨Ò²¿ÉÒÔÓÃÓÚÌí¼Ó Getter ºÍ Setter£º
ʵÀý
// ´´½¨¶ÔÏó var person = {firstName:"Bill", lastName:"Gates"}; // ¶¨Òå getter Object.defineProperty(person, "fullName", { get : function () {return this.firstName + " " + this.lastName;} });
Ò»¸ö¼ÆÊýÆ÷ʵÀý
ʵÀý
// ¶¨Òå¶ÔÏó var obj = {counter:0}; // ¶¨Òå setters Object.defineProperty(obj, "reset", { get : function () {this.counter = 0;} }); Object.defineProperty(obj, "increment", { get : function () {this.counter++;} }); Object.defineProperty(obj, "decrement", { get : function () {this.counter--;} }); Object.defineProperty(obj, "add", { set : function (value) {this.counter += value;} }); Object.defineProperty(obj, "subtract", { set : function (i) {this.counter -= i;} }); // ²Ù×÷¼ÆÊýÆ÷£º obj.reset; obj.add = 5; obj.subtract = 1; obj.increment; obj.decrement;