javascript学习笔记——理解对象

1.定义:

① 无序属性的集合,其属性可以包含基本值、对象或者函数;

②对象是一组没有特定顺序的值,对象的每个属性和方法都有一个名字,而每个名字都映射到一个值;

③可以看成是散列表,是成组的名值对,其中值可以是数据或函数

2.属性类型

①对象中的属性分为:数据属性和访问器属性

javascript学习笔记——理解对象_第1张图片

②修改writable的特性值

var person {};
Object.defineProperty(person,"name",
    {writable:false;   //修改特性值writable为属性值不可修改
     value:"amy";
});

alert(person.name);    //"amy"
person.name="gery";
alert(person.name);    //"amy"

修改configurable的特性值,一旦把该属性定义为不可配置的,就不能再把它变回配置了

在调用Object.defineProperty()方法时,如果不指定,configurable,writable,enumerable特性的默认值都是false
var person {};
Object.defineProperty(person,"name",
    {configurable:false;   //把configurable设置为false,表示不能从对象中删除属性
     value:"amy";
});

alert(person.name);    //"amy"
delete.person.name;
alert(person.name);    //"amy"

③使用访问器属性的常用方式,即设置一个属性的值会导致其他属性的变化

var book={
  _year:2004;  下划线_标记得属性,表示只能通过对象方法访问的属性
  edition:1;
};

//定义访问器属性year,包含一个getter函数和setter函数
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

④定义多个属性

var book={};
//定义多个属性
Object.defineProperties(book,{
  _year:{value:2004},    //数据属性

  edition:{value:1},

  year:{          //访问器属性
    get:function(){
   return this._year;
    },
    set:function(newValue){
     if(newValue>2004){
        this._year=newValue;
        this.edition+=newValue-2004;
     }
   }
}

});

⑤读取访问器属性的特性,调用getOwnPropertyDescriptor(),这个方法可以针对任何对象——包括DOM和BOM对象

var des=Object.getOwnPropertyDescriptor(book,"_year");
alert(des.value);      //2004
alert(des.configurable);     //false

 

你可能感兴趣的:(javascript学习笔记,对象的定义,数据属性,访问器属性,定义多个属性)