js Object的属性 Configurable,Enumerable,Writable,Value,Getter,Setter

来源:互联网 发布:古罗马怎么灭亡的 知乎 编辑:程序博客网 时间:2024/04/28 22:23

对象的数据属性

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});//valueconsole.log(person);//xiaoming,默认value//writableperson.name="qiang";console.log(person);//xiaoming,不可修改value//enumerablefor(var i in person){    console.log(person[i]) //无结果,不可循环}//configurabledelete person.nameconsole.log(person.name)//xiaoming,不可删除Object.defineProperty(person,'name',{    configurable:true //不可修改,将抛出错误});

访问器属性

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)//2004book.year = 2006;console.log(book.year)//2006console.log(book.edition)//2

定义多个属性

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

读取属性

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');

console.log(descriptor__year )
这里写图片描述

console.log(descriptor_year )
这里写图片描述

1 0
原创粉丝点击