前端宝典【犀牛书】06(对象)
对象
一、对象是属性的无序集合,每个属性都是一个名/值对。
二、属性名是字符串,对象可以是字符串到值的映射。
三、对象里的键值对数据结构可以叫做
比如“ 散列”( hash)、“ 散列表”( hashtable)、“ 字典”( dictionary)、“ 关联数组”( associative array)。
属性特性
·可 写( writable attribute), 表明 是否 可以 设置 该 属 性的 值。
·可 枚举( enumerable attribute), 表明 是否 可以 通过 for/ in 循环 返回 该 属性。
·可 配置( configurable attribute), 表明 是否 可以 删除 或 修改 该 属性。
对象特性
·对象 的 原型( prototype) 指向 另外 一个 对象, 本 对象 的 属性 继承 自 它的 原型 对象。
·对象 的 类( class) 是一 个 标识 对象 类型 的 字符串。
·对象 的 扩展 标记( extensible flag) 指明 了( 在 ECMAScript 5 中) 是否 可以向 该 对象 添加 新 属性。
四、创建对象
1、字面量{}
2、object.create(null)没有原型的对象(object.prototype)
3、new object()
继承
假设 要 查询 对象 o 的 属性 x, 如果 o 中 不存在 x, 那么 将会 继续 在 o 的 原型 对象 中 查询 属性 x。 如果 原型 对象 中 也没 有 x, 但这 个 原型 对象 也有 原型, 那么 继续 在这 个 原型 对象 的 原型 上 执行 查询, 直到 找到 x 或者 查找 到 一个 原型 是 null 的 对象 为止。
delete
delete 只是 断开 属性 和 宿主 对象 的 联系, 而 不会 去 操作 属性 中的 属性
eg:a={ p:{ x: 1}}; b= a. p; delete a. p; 执行 这段 代码 之后 b. x 的 值 依然是 1。
检测属性
in
枚举属性
这个案列很经典,请自行翻阅6.5
API
对象检测属性
a.hasOwnProperty(b)是否是自有属性
a.propertyIsEnumberable(b)是否是自有属性且可遍历
a instanceOf b 检测是否在原型链上
a in b 检测是否自有属性
对象遍历属性
for(a in b)遍历自有或者继承对象(早期的内置对象都是不可枚举)
Object.keys(a)遍历对象的属性返回数组
Object.getOwnpropertyNames(a)遍历对象属性返回数组(属性不可枚举也一样遍历)
修改对象的属性
Object.getOwnPropertyDescriptor(对象,属性)获取对象属性的描述符
承属性和不存在的属性打印为undefined
Object.defineProperty(对象,属性,描述)
configable为可配置时可用value对属性值修改,也可以将属性给改成存储器属性
writeable为不可写时不可用变量解析加赋值语句进行修改
只修改新建属性和自有属性,不能修改继承属性
查看对象的原型
Object.getPrototypeOf()
o.constructor.prototype
查看一个对象是否是另一个对象的原型
isPrototypeOf()
查看属性是否能在原型链上解析
instanceof()
查看对象的类
toString()
五、存储器属性
存储器属性是用get,set方法进行定义函数,存储器属性可以继承(数据属性是一个单纯的值)