1.选择器属性:关键字get和set设置,若只具有get方法则为只读属性;若set和get方法均存在,则是读/写属性。
例如:
var obj={
x:1,//普通的可读写数据属性
//r为可读写的存取器属性
get r(){return this.x;},
set r(value){this.x=value;}
};
console.log(obj.x);//1
obj.r=100;
console.log(obj.r);//100
2.属性的特性:值(value)、可写性(writable)、可枚举(enumerable)、可配置(configurable)。
在ECMAscript5中定义了一个属性描述符对象来代表这四个特性。
(1).通过Object.getOwnPropertyDescriptor()方法可以获取某个对象特定属性的描述符(属性仅仅限于自有属性)。
例如:
var obj={x:1}
console.log(Object.getOwnPropertyDescriptor(obj,"x"));
//{value=1,writable=true,enumerable=true,configurable=true}
console.log(Object.getOwnPropertyDescriptor(obj,"y"));//undefined,属性不存在
console.log(Object.getOwnPropertyDescriptor(obj,"toString"));//undefined,属性为继承属性
(2).Object.defineProperty()方法可以修改对象属性的特性(前提是该属性是可配置的)。
例如:
var obj={x:1};
//将obj的x属性设置为不可写的
Object.defineProperty(obj,"x",{value:100,
writable:false,
enumerable:true,
configurable:true
});
console.log(obj.x);//100
obj.x=111;
console.log(obj.x);//100