我们把描述JavaScript中定义内部特性的属性叫做属性描述符
分为两大类:数据描述符和存取描述符
数据描述符是一个拥有可写或不可写的属性(Writable);
存取描述符不包含数据值,是一组拥有getter和setter属性的描述符;
描述符必须是这两者之一,不可能都是这两者;
数据描述符合存取描述符都具有以下的可选键值:
configurable这个指的是描述,当属性的configurable的值为true的时候,该属性的描述符才可以改变,同时该属性可以从对象上被删除,默认值是false
enumerable这个指的是枚举,当属性的enumerable的值为true的时候,该属性才能出现在对象的枚举属性中,默认也为false。
数据描述符具有以下的可选键值;
value:该属性对应的值,可以是任何有效的js值(数值,对象,函数····),默认是undefined;
writable:当且仅当writable的值为true的时候,value的值才能被赋值运算符所改变,默认值是false;
存取描述符具有以下的可选键值;
get:一个给属性提供getter的方法,如果没有getter则为undefined,当访问该属性的时候,该方法会被执行,方法执行的时候没有参数传入(括号中没有内容),但是会传入this对象(由于继承关系,这里的this并不一定是定义该属性的对象)默认值是undefined
set:一个给属性提供setter的方法,如果没有setter则为undefined 当属性值被修改的时候,该方法会被触发,该方法接受唯一的参数就是属性的新的参数值 默认是undefined
https://www.jianshu.com/p/19529527df80