重学JS-第六章原型拾遗

106 阅读1分钟

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