参考文章(推荐!推荐!):JavaScript中的Object.defineProperty()和defineProperties()segmentfault
总结起来就是:bash
一、数据描述符(数据属性):可写或不可写(Configurable、Enumerable、Writable、Value)函数
二、存取描述符(访问器属性):getter-setter函数功能(Configurable、Enumerable、Get、Set)ui
一、定义和修改属性的方法:defineProperty和definePropertiesspa
Object.defineProperty(obj,prop,descriptor) //分别是被操做对象,对象的名称,属性的描述符
Object.defineProperties(obj,props) //分别是被操做对象,该对象的属性配置
复制代码
二、获取内部属性的方法:getOwnPropertyDescriptor和getOwnPropertyDescriptors3d
Object.getOwnPropertyDescriptor(obj,prop)
Object.getOwnPropertyDescriptors(obj)复制代码
一、configurable设置为false,不可delete,不可改变writable(是false的时候;若是writable为true,能够修改writable和value的属性)code
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复制代码
一、gettter和setter在严格模式下不一样时使用回抛出错误cdn
二、数据描述符和存取描述符不能混用。对象