理解对象之 —— 数据属性与访问器属性

ES5中对象的属性可以分为‘数据属性’和‘访问器属性’两种。

数据属性一般用于存储数据数值,访问器属性对应的是set/get操作,不能直接存储数据值。

1.数据属性特性:value、writable、enumerable、configurable。

解释:configurable:true/false,是否可以通过delete删除属性默认false;
enumerable:true/false,是否可以通过for in循环返回,默认false;
writable:true/false,是否可以修改属性的值,默认false;
value:undefined,设置属性的值,默认undefined。

var person = {};
Object.defineproperty(person,"name",{
writable : false, //修改属性的值为只读(不可修改)
configurable : false; // 设置为不可删除属性
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删除属性,默认false;
enumerable:true/false,是否可以通过for in循环返回,默认false;
set:function,读取属性值时调用的函数;
get:function,修改属性值时调用的函数。

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

将属性添加到对象或修改现有属性的特性使用Object.defineProperty() 或 Object.defineproperties()方法;

Object.defineProperty(object, propertyname, descriptor):

参数解释:object:需要添加或修改属性的对象;

propertyname:属性的名称,字符串格式;

descriptor:属性的描述,设置数据属性或访问器属性的特性。

你可能感兴趣的:(理解对象之 —— 数据属性与访问器属性)