(整理自網(wǎng)絡(luò))
ES5中對象的屬性可以分為‘?dāng)?shù)據(jù)屬性’和‘訪問器屬性’兩種裕菠。
數(shù)據(jù)屬性一般用于存儲數(shù)據(jù)數(shù)值奴潘,訪問器屬性對應(yīng)的是set/get操作,不能直接存儲數(shù)據(jù)值奈虾。
一肉微、數(shù)據(jù)屬性特性:value、writable劳曹、enumerable铁孵、configurable蜕劝。
configurable:true/false鳖擒,判讀是否可以delete刪除屬性,能否修改屬性的特性馆蠕,能否把屬性修改為訪問器屬性播赁,默認(rèn)false容为;
enumerable:true/false坎背,是否可以通過for in循環(huán)返回,默認(rèn)true懂更;
writable:true/false沮协,是否可以修改屬性的值皂股,默認(rèn)true;
value:undefined悍募,設(shè)置屬性的值,默認(rèn)undefined喜鼓。
二庄岖、訪問器屬性特性:set心剥、get优烧、enumerable畦娄、configurable。
configurable:true/false再膳,是否可以通過delete刪除屬性喂柒,能否修改屬性的特性灾杰,能否把屬性修改為訪問器屬性,默認(rèn)false昭娩;
enumerable:true/false,是否可以通過for in循環(huán)返回磕诊,默認(rèn)false滞磺;
set:function击困,讀取屬性值時調(diào)用的函數(shù);
get:function目派,修改屬性值時調(diào)用的函數(shù)企蹭。
訪問器屬性可以起到很好的保護(hù)作用谅摄,當(dāng)只有g(shù)et方法時送漠,就實(shí)現(xiàn)只讀不能寫闽寡;反之爷狈,只有set時涎永,便是只能寫入而不能讀取
三、將屬性添加到對象或修改現(xiàn)有屬性的特性使用Object.defineProperty() 或 Object.defineproperties()方法(不論是數(shù)據(jù)屬性還是訪問器屬性):
格式:Object.defineProperty(object, propertyname, descriptor):
參數(shù)解釋:object:需要添加或修改屬性的對象拷淘;
propertyname:屬性的名稱,字符串格式恃轩;
descriptor:屬性的描述松忍,設(shè)置數(shù)據(jù)屬性或訪問器屬性的特性鸣峭。
四摊溶、數(shù)據(jù)屬性實(shí)例:
五骤铃、訪問器屬性實(shí)例:
_name前面的下劃線是一種常用幾號喊暖,用于表示只能通過對象方法(get陵叽、set)訪問的屬性咨跌。