对象的数据属性
Configurable,Enumerable,Writable,Value
var person = {}
Object.defineProperty(person,'name',{configurable:false,//能否使用delete、能否需改属性特性、或能否修改访问器属性、,false为不可重新定义,默认值为true enumerable:false,//对象属性是否可通过for-in循环,flase为不可循环,默认值为true writable:false,//对象属性是否可修改,flase为不可修改,默认值为true value:'xiaoming' //对象属性的默认值,默认值为undefined }); //value console.log(person);//xiaoming,默认value //writable person.name="qiang"; console.log(person);//xiaoming,不可修改value //enumerable for(var i in person){ console.log(person[i]) //无结果,不可循环 } //configurable delete person.name console.log(person.name)//xiaoming,不可删除 Object.defineProperty(person,'name',{ configurable:true //不可修改,将抛出错误 }); - 1
 - 2
 - 3
 - 4
 - 5
 - 6
 - 7
 - 8
 - 9
 - 10
 - 11
 - 12
 - 13
 - 14
 - 15
 - 16
 - 17
 - 18
 - 19
 - 20
 - 21
 - 22
 - 23
 - 24
 - 25
 - 26
 - 27
 
访问器属性
getter,setter
var book = {_year: 2004,//属性前面加_,代表属性只能通过对象方法访问edition: 0
}
Object.defineProperty(book,'year',{ get: function(){ return this._year; }, set: function(newValue){ if(newValue > 2004){ this._year = newValue; this.edition += newValue - 2004 } } }); console.log(book.year)//2004 book.year = 2006; console.log(book.year)//2006 console.log(book.edition)//2 - 1
 - 2
 - 3
 - 4
 - 5
 - 6
 - 7
 - 8
 - 9
 - 10
 - 11
 - 12
 - 13
 - 14
 - 15
 - 16
 - 17
 - 18
 - 19
 
定义多个属性
Object.defineProperties
var book = {};Object.defineProperties(book, {_year: {value:2004,writable:true},edition: {value: 0,writable:true }, year: { get: function() { return this._year; }, set: function(newValue) { if (newValue > 2004) { this._year = newValue; this.edition += newValue - 2004 } } } }); console.log(book.year) //2004 book.year = 2006; console.log(book.year) //2006 console.log(book.edition) //2 - 1
 - 2
 - 3
 - 4
 - 5
 - 6
 - 7
 - 8
 - 9
 - 10
 - 11
 - 12
 - 13
 - 14
 - 15
 - 16
 - 17
 - 18
 - 19
 - 20
 - 21
 - 22
 - 23
 - 24
 - 25
 - 26
 
读取属性
var book = {};Object.defineProperties(book, {_year: {value:2004,writable:true},edition: {value: 0, writable:true }, year: { get: function() { return this._year; }, set: function(newValue) { if (newValue > 2004) { this._year = newValue; this.edition += newValue - 2004 } } } }); console.log(book.year) //2004 book.year = 2006; console.log(book.year) //2006 console.log(book.edition) //2 //读取属性 var descriptor__year = Object.getOwnPropertyDescriptor(book,'_year'); var descriptor_year = Object.getOwnPropertyDescriptor(book,'year'); - 1
 - 2
 - 3
 - 4
 - 5
 - 6
 - 7
 - 8
 - 9
 - 10
 - 11
 - 12
 - 13
 - 14
 - 15
 - 16
 - 17
 - 18
 - 19
 - 20
 - 21
 - 22
 - 23
 - 24
 - 25
 - 26
 - 27
 - 28
 - 29
 
console.log(descriptor__year ) 
console.log(descriptor_year ) 
版权声明:如需转载请注明出处。 http://blog.csdn.net/qq_17335153/article/details/52584727