1属性
为了实现JS引擎,定义了在JS内部使用的特性
数据属性
包含数据值
四个描述数据属性行为的特性:
configurable 能否通过delete删除属性,能否修改属性特性,能否修改为访问器属性(默认true)
enumerable 能否用for-in循环(默认true)
writable 能否修改属性值(默认true)
value 属性的数据值(默认undefined)
修改默认的特性:
只能用Object.defineProperty()
Object.defineProperty(person,'name',{ configurable:true, writable:false, value:'lan' })
访问器属性
不包含数据值,包含一对getter,setter函数(非必须)
四个描述访问器属性行为的特性:
configurable 同上
enumerable 同上
get 读取属性时调用(默认undefined)
set 写入属性时调用(默认undefined)
修改默认的特性:
只能用Object.defineProperty()
- 让我联想到了vue的watch和compute
定义多个属性
Object.defineProperties()
读取属性特性
Object.getOwnPropertyDescriptor()
- 疑问:为什么这里是false了?
2原型
返回实例的原型对象
Object.getPrototypeOf(object)
完全删除实例属性,恢复实例访问原型中的属性
delete
关于in操作符
第一种:在for-in中使用
第二种:“属性名” in 实例名(通过对象能够访问给定属性返回true,无论属性在实例还是在原型对象上)
取得对象的_可枚举_实例属性
Object.keys()
用处:遍历对象
Object.values()和Object.keys()是相反的操作,把一个对象的值转v 换为数组
3继承
确定原型和实例关系
instance of SuperType
instance of SubType