Javascript中的Object.defineProperty()

453 阅读1分钟

参考文章(推荐!推荐!):JavaScript中的Object.defineProperty()和defineProperties()

总结起来就是:

一:ECMAScript中存在两种属性描述符:

1、数据描述符(数据属性):可写或不可写(Configurable、Enumerable、Writable、Value)

2、存取描述符(访问器属性):getter-setter函数功能(Configurable、Enumerable、Get、Set)

二:定义属性和获取属性的方法

1、定义和修改属性的方法:defineProperty和defineProperties

Object.defineProperty(obj,prop,descriptor) //分别是被操作对象,对象的名称,属性的描述符

Object.defineProperties(obj,props) //分别是被操作对象,该对象的属性配置

2、获取内部属性的方法:getOwnPropertyDescriptor和getOwnPropertyDescriptors

Object.getOwnPropertyDescriptor(obj,prop)

Object.getOwnPropertyDescriptors(obj)

三:扩展实例

1、configurable设置为false,不可delete,不可改变writable(是false的时候;如果writable为true,可以修改writable和value的属性)

四:对象中添加存取属性

var obj = {};
var avalue;
var b;
Object.defineProperty(obj,'a', {
	configurable: true,
	enumrable: true,
	get: function() {
		return avalue
	},
	set: function(newvalue) {
		avalue = newvalue
		b = newvalue + 1
	}
});
console.log(b);  //undefined
console.log(obj.a); //undefined
obj.a = 2;
console.log(obj.a); //2
console.log(b); //3

1、gettter和setter在严格模式下不同时使用回抛出错误

2、数据描述符和存取描述符不能混用。

五、全局环境