对象属性的特性var obj1 = new Object();Object.defineProperty(obj1,"y",{value:1; 属性y的值,默认是undefinedwritable: true/false; enumerble: true/false; configurable: true/false;});分析:首先 第一行代码var obj1 = new Object(),表示创建一个空对象,相当于 var obj1 = { };{} 叫做 对象字面量前提是new Object()中没有传入参数,才与{}一样Object.defineProperty(obj, prop, descriptor)方法会直接在一个对象上定义一个新属性,或者修改一个对象的现有属性, 并返回这个对象。在这儿,obj1 要定义属性的对象,要修改的属性名称 y , descriptor 将被定义或修改的属性描述符(三个,默认都是false)。其中 :三个描述分别是writeable:表示是否能修改属性的值enumerable:表示能否通过for-in循环返回属性,代表属性是否可枚举configurable:是否能通过delete删除属性从而重新定义属性,能否修改属性的三个特性,或者能否把属性修改为访问器属性,直接在对象上定义属性。视图找一个不存在的属性,可通过get(存储器属性)比如这里通过字面量形式创建person对象,有名字,性别属性var person = {username:"king",sex:"男“,get age(){ return 12; },set age( val ) { return ("不能设置"+val ) };console.log( person.username); // kingconsole.log( person.age) ; 12 当执行到console(person.age)代码行时,person.age 试图找到不存在的 age 属性,如果想要得到age属性,在person对象里,前面写上get关键字 ,即可得到age的返回值。 所以,当想要得到age的值的时候,会自动调用写好的 get age(){}方法如果想要设置age属性的值:person.age = 13;console.log( person.age); //输出 :不能设置13defineProperty方式创建属性并添加描述var obj={}Object.definedProperty(obj,"x",{get : function ( ) { // 注意:通过这种方式 写get方法要通过:冒号分隔return 123;}});defineProperties 方式创建多个属性并添加描述通过字面量以及defineProperty的方法设置属性只能一个一个设置,其实可以用Object的property属性设置多个var person = {};Object.defineProperties(person,{"user" : { //引号可写可不写 ( 属性都是字符串)value:"king",writeable:true,enumerable:true, configuable:true //注意:这儿没有了逗号 以上两个包括本属性,不写 默认是false;}, //注意 逗号age : {value:12,writeable:false} });console.log(person.user);//kingconsole.log(person['age']); 访问属性,可直接写名字,也可以加上[],当名字有破折号,就必须加上了,比如person[first-name]console.log( Object.getOwnPropertyDescriptor(person,"user") );得到person对象的user属性的描述,返回结果是:Object{ value:"king" , writable:true , enumerable:true , configurable:true }console.log(Object.getOwnPropertyDescriptor(person,"age"));得到person对象的age属性的描述,返回:Object{ value:12 , writeable:false , enumerable:false, configurable:false} 定义age属性的时候,省略了enumeralb 和configurable的属性描述,所以返回时可以看到,默认是false如果在person对象里面加上:person.addr = " 北京 “;console.log(Object.getOwnPropertyDescriptor(person,"addr"));返回结果三个属性描述都是true;