ECMAScript5 允许使用用户定义的属性描述符来覆盖给定属性的下列任何特性。
enumerable :控制属性是否可以在for-in循环中被枚举。
configurable:控制属性是否可以用delete来删除。
writable:控制属性是否可以呗覆盖。
get:一个计算属性访问的返回值函数。
set:一个函数,当属性被赋值时被调用。
ECMAScript5 中引入的方法 Object.defineProperty 可以为一个对象增加新的属性。
var person = {}; Object.defineProperty(person, "name", { writable: false, configurable: false, value: "Nicholas" }); person.name = "Jack"; delete person.name; alert(person.name);
var person = { _year: 2012 } Object.defineProperty(person, "year", { get: function() { return this._year; }, set: function(value) { this._year = value; } }); alert(person.year); person.year = 2015; alert(person.year);
ECMAScript5 中还有一个方法 Object.defineProperties可以为一个对象增加多个属性。
var book = {}; Object.defineProperties(book, { _year: { writable: true, value: 2004 }, edition: { value: 1 }, year: { get: function() { return this._year; }, set: function(value) { this._year = value; } } });