ECMAScript 262v5带来的新东西,FF把它归入为javaScript 1.8.5的功能之一。
先看看MSDN上的描述:
增加一个属性到对象,或者修改已经存在的属性。
语法:
Object.defineProperty(object,propertyname,decripter);
obejct
必须(也可以用null),增添或修改属性的对象,可以JavaScript原生对象或者DOM对象。
propertyname
必须。属性名字符串。
descriptor
必须。描述属性的JavaScript描述符。目标属性所拥有的属性。
可以提供的属性列表有:
value:属性的值
writeable:是否可写。如果值为false,那么该属性值就无法做更改
get:一旦目标属性被访问就会调用此方法,而且会返回此方法返回的值
set:一旦目标属性被赋值就会执行此方法
configurable:如果值为false,则任何想删除目标属性或修改以下属性(writable,configurable,enumerable)的行为都将被无效化
enumerable:是否能在for...in循环中遍历出来或者在Object.keys()中或取出来。
Object.defineProperty(o,'a',{get:function(){return 2;}});
o.a;//2
Object.defineProperty(o,'a',{value:1,get:function(){return 2;}});
//VM6281:2 Uncaught TypeError: Invalid property. A property cannot both have accessors and be writable or have a value, #<Object>
要获取某个对象的属性所具有的descripter属性描述可以使用:Object.getOwnPropertyDescriptor( obj, "foo" );该值会返回一个对象。
Object.getPrototypeOf()可以获取对象的原型。