两种定义形式的区别
1.直接定义
1 | let obj = {} |
等同于
1 | let obj = {} |
2.Object.defineProperty()定义
1 | Object.defineProperty(obj,'name',{ |
等同于
1 | let obj = {} |
Object.defineProperty()语法说明
Object.defineProperty(obj, prop, desc)
1 | obj : 需要定义属性的当前对象 |
描述符 | configurable | enumerable | value | writable | get | set |
---|---|---|---|---|---|---|
数据描述符 | Yes | Yes | Yes | Yes | No | No |
存取描述符 | Yes | Yes | No | No | Yes | Yes |
描述符参数实例说明
get & set
1 | get |
1 | let Person = {} |
configurable
1 | 当且仅当该属性的 configurable 为 true 时,该属性描述符才能够被改变,同时该属性也能从对应的对象上被删除。默认为 false。 |
enumerable
1 | 当且仅当该属性的enumerable为true时,该属性才能够出现在对象的枚举属性中。默认为 false。 |
value
1 | 该属性对应的值。可以是任何有效的 JavaScript 值(数值,对象,函数等)。默认为 undefined。 |
writable
1 | 当且仅当该属性的writable为true时,value才能被赋值运算符改变。默认为 false。 |