20200302
- date: 20200302
- author: czhang
Plan
你不知道的 JavaScript 第二部分 第三章继续
Notes
1. 属性描述符
writable
configurable
enumerable
不变性
[[Get]]
- 首先寻找对象是否有相同名称的属性,如果有则返回。若没有,寻找原型链
- 实在找不到,则返回 undefined ===> 不同于引用不存在的对象(返回 ReferenceError)
[[Put]]
Getter Setter
- 给属性定义 getter、setter 时,属性会被定义为 "访问描述符"
- 访问描述符会忽略 value 和 writable 特性,更关注 set get 及 configurable 和 enumerable
- 如果只定义了 get 属性,没有定义 set 属性,无论怎样赋值,都会得到 get 的结果。
存在性
问:如何判断一个对象没有该属性,还是该属性的值为 undefined
- in // 原形链
- myObj.hasOwnProperty() // 有时候对象可能没有连接到 myObj.property 上
- Object.property.hasOwnProperty.call(myObj,'a')
可枚举性
- enumerable 属性为 false 时 可以直接获取、可使用 in 、可使用 hasOwnProperty
- 通过 myObj.propertyIsEnumerable()
- 通过 Object.keys() ==> 包含所有可枚举属性
- Object.getOwnPropertyNames() ===> 包含所有属性,无论是否可枚举
- keys getOwnPropertyNames 都只查找对象直接包含的属性
for...of
首先向被访问对象请求一个迭代器对象,然后通过调用迭代器对象的 next()方法便利所有的返回值
2. 类
子类 父类 super 继承 多态 多重继承