属性的特性:
writable: true // 可写 是否可设置该属性的值
enumerable: true // 可枚举 for/in是否可以获得该值
configurable: true // 是否可以删除属性或修改该属性的特性
// 在node中即使是false也会被删除自定义属性的特性:
Object.defineProperty(对象, 属性名, 特性描述对象)
Object.defineProperties(对象, 多属性特性描述对象)查看属性的特性:
Object.getOwnPropertyDescriptor(对象, 属性名) -> 私有属性的特性描述小技巧:
好用的set get
自定义属性的特性
Object.defineProperty(对象, 属性名, 特性描述对象)
writable:false
var
enumerable: false
在浏览器中打印obj可以显示,只是在for/in循环中不可枚举
在node中打印obj不可以显示
var
configurable: false
- 在浏览器中delete obj.z 会返回false,不被删除。在node中会被删除
var
2. 不可重新写属性的特性配置,不然会报错。如果是true则不报错
var
报错。
改成configurable: true
var
重新配置成功
Object.defineProperties(对象, 多属性特性描述对象)
var
查看属性的特性:
Object.getOwnPropertyDescriptor(对象, 属性名)
var
小技巧的使用:
假设一个班上有男生10人,女生8人,每人班费10元,班上的人数不会变,但是费用会变动。
对象中的函数
let
只要修改了自定义属性中的onemoeny价格,再次查看对象,对象中的allmoney就会改变。
get是函数返回出来的结果。
注意的点:
自定义的属性不能在再配置set/get函数中出现,不然会死循环报错
let
最大次数超过堆栈的最大值
模拟死循环
let