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;

Ç××ÔÊÔÒ»ÊÔ

VUE