理解對(duì)象之 —— 數(shù)據(jù)屬性與訪問器屬性

ES5中對(duì)象的屬性可以分為‘?dāng)?shù)據(jù)屬性’和‘訪問器屬性’兩種。

數(shù)據(jù)屬性一般用于存儲(chǔ)數(shù)據(jù)數(shù)值,訪問器屬性對(duì)應(yīng)的是set/get操作,不能直接存儲(chǔ)數(shù)據(jù)值。

1.數(shù)據(jù)屬性特性:value、writable、enumerable、configurable。

解釋:configurable:true/false,是否可以通過delete刪除屬性默認(rèn)false;
enumerable:true/false,是否可以通過for in循環(huán)返回,默認(rèn)false;
writable:true/false,是否可以修改屬性的值,默認(rèn)false;
value:undefined,設(shè)置屬性的值,默認(rèn)undefined。

var person = {};
Object.defineproperty(person,"name",{
writable : false, //修改屬性的值為只讀(不可修改)
configurable : false; // 設(shè)置為不可刪除屬性
value :  "Mr.Chen"

});
alert(person.name); //"Mr.Chen"
person.name = "chen";
alert(person.name);//"Mr.Chen"

2.訪問器屬性特性:set、get、enumerable、configurable。

解釋:configurable:true/false,是否可以通過delete刪除屬性,默認(rèn)false;
enumerable:true/false,是否可以通過for in循環(huán)返回,默認(rèn)false;
set:function,讀取屬性值時(shí)調(diào)用的函數(shù);
get:function,修改屬性值時(shí)調(diào)用的函數(shù)。

var book = {
     _year: 2004,
     edition: 1
 };
          
Object.defineProperty(book, "year", {
     get: function(){
                return this._year;
      },
      set: function(newValue){
            
          if (newValue > 2004) {
              this._year = newValue;
              this.edition += newValue - 2004;
                
           }
      }
});
        
book.year = 2005;
alert(book.edition);   //2

將屬性添加到對(duì)象或修改現(xiàn)有屬性的特性使用Object.defineProperty() 或 Object.defineproperties()方法;

Object.defineProperty(object, propertyname, descriptor):

參數(shù)解釋:object:需要添加或修改屬性的對(duì)象;

propertyname:屬性的名稱,字符串格式;

descriptor:屬性的描述,設(shè)置數(shù)據(jù)屬性或訪問器屬性的特性。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容