var person = {name:"jie",age:18}; 如果只是这样定义一个object,那么configurable:true,Enumerable:true,writable:true; 要改变这些属性类型,需要显式的调用Object.defineProperty Object.defineProperty(person,"name",{ configurable:false, //能否被删除,能否修改访问属性,默认true,如果在false重设defineProperty会报错 Enumerable:false,//能否被for-in,默认为true writable:false, //能否修改,默认为true value:"gax" }) console.log(person); //{name: "gax",age:18} person.name = "abc"; console.log(person); //{name: "gax",age:18} [configurable] Object.defineProperty(person,"name",{ configurable:false, value:"jie" }) delete person.name; //报错 Object.defineProperty(person,"name",{ value:"jie2" })//报错 configurable如果被设置false,那么如果delete会报错, 如果configurable,Enumerable,writable,value中,任意一项于初始值不一致,都会报错 [Enumerable] var person = {name:"jie"}; Object.defineProperty(person,"age",{ Enumerable:false, value:"18" }) for(var x in person){ console.log(x); } //只有name [writable] var person = {}; Object.defineProperty(person,"age",{ writable:false, value:"18" }) person.age = 21;//依然是 18 如果 var person = {}; Object.defineProperty(person,"age",{ value:"18" }) 那么Object.getOwnPropertyDescriptor(person,"age")//{value: 18, writable: false, enumerable: false, configurable: false} 全部未定义的默认全部false 同理适用于new出来的实例: function person(){ Object.defineProperty(this,"age",{ writable:false, value:"18" }) } var son = new person(); 这样就能做到对象中的权限控制。