# 对象

  • 属性:
    • 属性名:包括空字符串在内的任意字符串
    • 属性值:
      • 任意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