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);
执行以上代码会弹出 ‘Nicholas’,这就证明赋值与删除对person.name属性无效了(使用defineProperty添加属性时 enumerable configurable writable 默认都将被设置为false)。
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);
上面我们为_year添加了getter和setter 名为year ,所以运行代码第一次回弹出 ’2012‘ 第二次弹出 ‘2015’ 。
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;
}
}
});
以上代码为book添加 _year属性与edition属性, 还为_year 添加了getter 和setter。