javascript對象的defineProperty方法解析

defineProperty是Object對象特有的方法,其作用是爲對象定義新的屬性和修改對象原有的屬性。
調用形式爲:Object.defineProperty(obj, prop, descriptor)
obj:屬性所在的對象
prop:屬性的名稱
descriptor:描述符對象,表示屬性的行爲對象,該對象的屬性爲爲以下的四種值,可設置其中一個或多個
1、configurable:表示能否通過delete刪除屬性,能否把屬性修改爲訪問器屬性(包含getter、setter屬函數),默認爲true。
2、enumerable:表示能否通過for-in循環返回該屬性,默認爲true。
3、writable:表示能否該修屬性的值,默認爲true.
4、value:包含屬性的值。默認爲true.
eg:修改屬性

var person={
    name:'xiami'
};
person.name='xia';  //此處可以修改name的值
console.log(person.name);//xia
Object.defineProperty(person,'name',{writable:false}); //設置其屬性不可以修改
person.name='macal'; 
console.log(person.name) //xia

其運行結果如下:
這裏寫圖片描述

此外該函數也可以創建屬性
eg:

var person={
    name:'xiami'
};
Object.defineProperty(person,'age',
    {
        configurable:true,   //如果不指定,默認爲false
        value:22
    }
); 
console.log(person.age) //22

此外也可以用該方法定義訪問器屬性(用於讀取或修改對象屬性的屬性,該屬性包含getter和setter方法)
eg:

var book={
    _year:2004
};
Object.defineProperty(book,'year',
        {
           get:function(){
               console.log('調用get方法');
               return this._year
           },
           set:function(value){
               console.log('調用get方法');
               this._year=value;
           }
        }
);
//調用修改器year屬性修改_year
book.year=2017;
//調用訪問器屬性year訪問_year
console.log(book.year);

其運行結果如下:
這裏寫圖片描述
可見,修改器屬性相當於一個用於修改對象屬性的屬性
不過在實際運用中一般比較少用該方法。

發佈了42 篇原創文章 · 獲贊 26 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章