属性的特性

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。


你可能感兴趣的:(属性的特性)