前端宝典【犀牛书】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方法进行定义函数,存储器属性可以继承(数据属性是一个单纯的值)

 

posted @ 2022-09-23 17:06  肥瘦皆宜  阅读(70)  评论(0编辑  收藏  举报