JavaScript--对象

对象

对象的定义

  • 无序属性的集合
  • 其属性可以包含基本值,对象,或者函数
  • 可以将对象想象成散列表:键值对,其中值可以是数据或者函数。
  • ECMAScript中的对象 其实就是一组数据(属性)和功能(方法)的集合。

创建Object实例

  • 使用构造函数创建,new Object()

    • var person = new Object(); person.name = “briup”; person.age = 22; X
  • 使用对象字面量表示法 不同的属性之间用’,‘分割,属性名和属性值之间用’:'分割

    • var person = { name : “briup”, age : 22 };

复杂数据类型Object

  • 访问对象属性

    • 点表示法,右侧必须是以属性名称命名的简单标识符

      • person.name
    • 中括号表示法

      • 中括号中必须是一个计算结果为字符串的表达式,
      • 可以通过变量访问属性
      • 如果属性名中 含语法错误的字符,或者属性名使用的是关键字或保留字,可以使用中括号
  • 删除属性

    • delete只是断开了属性和宿主对象的联系,而不会操作属性中的属性,
    • 并且delete只会删除自有属 性,不能删除继承属性。
    • 在销毁对象时,为了防止内存泄露,遍历对象中的属性,依次删除所有属 性。
  • 检测属性

    • in

      • 检测某属性是否是某对象的自有属性或者是继承属性
    • Object.prototype.hasOwnProperty()

      • 检测给定的属性是否是对象的自有属性,对于继承属 性将返回false
    • Object.prototype.propertyIsEnumerable()

      • 检测给定的属性是否是该对象的自有属性,并 且该属性是可枚举的。
      • 通常由JS代码创建的属性都是可枚举的,但是可以使用特殊的方 法改变可枚举性。
  • Object构造函数原型对象中的部分属性及方法

    • Object原型中的所具有的任何属性和方法也同样存在于其他对象中,

    • 任何对象继承 自Object

    • Object原型中常用的方法

      • constructor

        • 保存用户创建当前对象的函数,与原型对象对应的构造函数
      • hasOwnProperty(propertyName)

        • 检查给定的属性名是否是对象的自有属性
      • propertyIsEnumerable(propertyName)

        • 检查给定的属性在当前对象实例中是否存在
      • valueOf()

        • 返回对象的字符串,数值,布尔值的表示
      • toLocaleString()

        • 返回对象的字符串表示,该字符串与执行环境的地区对应
      • toString()

        • 返回对象的字符串表示
      • isPrototypeOf(object)

        • 检查传入的对象的原型

          • Object.prototype.isPrototypeOf(obj)

            • 结果为true
          • a.isPrototypeOf(b)

            • 如果a是b的原型,则返回true。如果b不是对象,或者a不是b的 原型,则返回false。
  • 对象序列化

    • 对象序列化是指将对象的状态转换为字符串
    • 也可以反序列化,将字符串还原为 对象函数
    • RegExp,Error对象,undefined值不能序列化和反序列化。

定义属性

  • 数据属性

    • 包含一个属性值的位置,这个位置可以读取和写入值

    • 数据属性的特征

      • [[Configurable]]

        • 表示是否通过delete删除属性从而重新定义属性,能否修改属性的特性,或 者能否把属性修改为访问器属性(属性直接定义在对象中,默认为true)。 当 为false时,不能重新定义不能使用delete删除。
        • 是否可删除,是否可重新定义该属性 默认值为true
      • [[Enumerable]]

        • 表示能否通过for-in循环返回属性。(属性直接定义在对象中,默认为true)
        • 是否可枚举 是否可以使用for-in遍历出来 默认值为true
      • [[Writable]]

        • 表示能否修改属性的值。(属性直接定义在对象中,默认为 true)
      • [[Value]]

        • 包含这个属性的数据值 name:jacky
    • 要修改属性默认的特性,必须使用的方法

      • ECMAScript5的Object.defineProperty(属 性所在的对象,属性的名字,一个描述符对象)
  • 访问器属性

    • 例如:_year–> year(访问器属性)

    • 访问器属性不包含数据值

    • 包含的是一对get和set方法,在读写访问器属性时,就是 通过这两个方法来进行操作处理的

    • 访问器属性不能直接定义,要通过 Object.defineProperty()这个Object的静态方法来定义

    • 访问器属性的特性:

      • [[Configurable]]

        • 表示是否通过delete删除属性从而重新定义属性,能否修改属性的特性,或者 能否把属性修改为访问器属性(默认为false)。
        • 是否可删除、是否可重新定义该属性 默认值为false
      • [[Enumerable]]

        • 表示能否通过for-in循环返回属性(默认为false)。
        • 是否可枚举 默认值为false
      • [[Get]]

        • 在获取属性时调用的函数,默认为undefined
      • [[Set]]

        • 在写入属性时调用的函数,默认为undefined
  • 定义多个属性

    • Object.defineProperties() Object的静态方法

      • 该方法接受两个对象参数,第一个参数是要添加或者要修改属性的对象,第二个参数 是对象的属性和属性的描述
  • 读取属性的特性

    • Object.getOwnPropertyDescriptor()

      • 获取指定属性的描述符该方法接受两个参数,第一个为属性所在的对象,第二 个为要读取其描述符的属性名称

        • 数据属性:configurable、enumerable、writable、value的值

        • 访问器属性:configurable、enumerable、get、set的值

值传递与引用传递(址传递)

  • 基本数据类型的变量:
    (值传递)

    • 可以直接操作保存在变量中的实际的值
    • 参数传递的时候传递的是实际值
  • 引用数据类型的变量:
    (引用传递(址传递))

    • 不能直接操作对象的内存空间,实际上是在操作对象的引用。可以为引用类型变量添加属性和 方法,也可以改变和删除其属性和方法。
    • 参数传递的时候传递的是引用地址。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值