数据属性的描述符对象的属性有 value 、 writeable 、enumerable 、 configurable 。
存取器属性的描述符对戏那个则是使用get属性和set属性代替value 和writeabe 。其中writeable、enumerable 和 configurable 都是布尔值。
get属性和set属性是函数值。
//如果想设置属性的特征,或者想让新建属性具有某种特殊特性,则需要调用object.fedineProperty(),传入一个要修改的对象,要创建
或者修改的属性的名称以及属性描述符对象:
<!DOCTYPE html> <lang ="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script type="text/javascript"> var o = {}; Object.defineProperties(o,"x",{value :1,writable : true,enumerable:false, configurable :true }); o.x; alert(o.x); Object.keys(o); //keys 方法仅返回可枚举属性和方法的名称。若要返回可枚举的和不可枚举的属性和方法的名称, // 可使用 Object.getOwnPropertyNames 函数 (JavaScript)。 Object.defineProperties(o,"x",{writeable:false}); o.x = 2 alert(o.x); var p =Object.defineProperties({}, { x: {value:1,writeable:true,enumerable:true,configurable:true}, y: {value:1,writeable:true,enumerable:true,configurable:true }, r:{ get:function () { return Math.sqrt(this.x * this.x + this .y * this.y) }, enumerable:true, configurable:true } }) Object.defineProperty(Object.prototype,"extend",{ writeable: true, enumerable: false, configrable:true, value: function (o) {//值就是这个属性 var names = Object.getOwnPropertyNames(o); for (var i = 0; i<names.length ; i++ ) { if (names[i] in this) continue;//如果属性已经存在,则跳过 var desc = Object.getOwnPropertyDescriptor(o,names[i]); Object.defineProperty(this,name[i],desc); } } }) </script> </head> <body> </body> </html>