# 对象
- 属性:
- 属性名:包括空字符串在内的任意字符串
- 属性值:
- 任意javascript值
- getter函数
- setter函数
- 属性特性 property attribute
- 可写 writable attribute:是否可设置该属性的值
- 可枚举 enumerable attribute:是否可通过for/in循环返回该属性
- 可配置 configurable attribute:是否可删除或修改该属性
- 原型 prototype:指向另外一个对象,本对象的属性继承自它的原型对象
- 类 class:标识对象类型的字符串
- 扩展标记 extensible flag:指明是否可向该对象添加新属性
# 对象的类型 3种
- 内置对象 native object:由ECMAScript规范定义的对象或类。例如数组、函数、日期、正则。
- 宿主对象 host object:由javascript解释器所嵌入的宿主环境定义。
- 自定义对象 user-defined object:由运行中的javascript代码创建的对象。
# 对象属性的类型 2种
- 自有属性 own property:直接在对象中定义的属性
- 继承属性 inherited property:在对象的原型对象中定义的属性
# 常见方法
- 创建 create
- 设置 set
- 查找 query
- 删除 delete
- 检测 test
- in
- hasOwnProperty()
- propertyIsEnumerable()
- !== undefined
- 枚举 enumerate
- for/in 遍历所有可枚举属性(包括自有和继承的属性)
/* 把p中的可枚举属性复制到o中 * 覆盖同名属性 */ function extend(o, p) { for (prop in p) { o[prop] = p[prop] } return o }
1
2
3
4
5
6
7
8
9/* 将p中的可枚举属性复制到o中 * 不覆盖同名属性 */ function merge(o, p) { for (prop in p) { if (o.hasOwnProperty(prop)) continue o[prop] = p[prop] } }
1
2
3
4
5
6
7
8
9