1. 程式人生 > >js Object的屬性 Configurable,Enumerable,Writable,Value,Getter,Setter

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

物件的資料屬性

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 //不可修改,將丟擲錯誤 });

訪問器屬性

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

定義多個屬性

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 )
這裡寫圖片描述