对象当中的属性可以分为两类
数据属性 和 访问器属性
对象中的属性在创建是都带有一些特性,这些特性决定了他们的行为(这些特性无法通过JavaScript代码访问,但在解析器内部确真真切切的需要他们)
数据属性 有四个特性 configurable Enumerable Writable Value
访问器属性也有四个特性 Configurable Enumerable get set
Configurable 设置为false时,属性的特性将不可以更改(有一个特殊的可以更改,就是Writable 由true该为false),属性不可以通过delete删除
Enumerable 设置为false时,属性不可以被枚举到
Writable 设置为false时,属性值不可以更改
value 用于存放属性的值
get 当访问器属性被访问时,执行get方法
set 当访问器属性被赋值时,执行set方法
可以同过Object.defineProperty()方法来设置属性的特性,也可以添加新的属性(在添加的同时设置其特性)这个函数接受三个参数,第一个为属性所在的对象,第二个为属性的名字,第三个为属性的描述符对象(属性的特性和特性值组成的对象),当 Configurable Enumerable Writable 被省略时默认为false
可以通过Object.getOwnPropertyDescript()方法来获取属性的特性(反回一个对象),此函数接受两个参数,属性所在的对象 和 属性的名字