对象概述
对象是 JavaScript 的基本数据类型,可以保持自有的属性,还可以从一个称之为原型的对象继承属性,对象的方法通常是继承的属性,这种「原型式继承」是 JavaScript 的核心特征。
对象是动态的,可以新增也可以删除属性,除了字符串、数字、布尔值、null
和 undefined
之外,JavaScript 中的其它值都是对象。
对象是可变的,我们通过引用而非值来操作对象,对象的常见用法是创建、设置、查找、删除、检测和枚举它的属性。
属性包括名字和值,对象中不允许出现同名属性,除了名字和值之外,每个属性还有一些与之相关的值,称为「属性特性」:
- 可写(writable),表明可设置该属性的值
- 可枚举(enumerable),表明可通过 for/in 循环该属性
- 可配置(configurable),表明可删除或修改该属性
ECMAScript 5 之前,通过代码给对象创建的所有属性都是可写、可枚举、可配置的,在 ECMAScript 5 中则可以对这些特性加以配置。
除了包含属性之外,每个对象还拥有三个相关的对象特性:
- 对象的原型(prototype),指向另外一个对象,本对象的属性继承自它的原型对象
- 对象的类(class),标识对象类型的字符串
- 对象的扩展标记(extensible flag),标识是否可以向该对象添加新属性(ECMAScript 5)
最后我们使用下面这些术语来对三类 JavaScript 对象和两类属性进行区分:
- 内置对象:由 ECMAScript 规范定义的对象或类,如数组、函数、日期和正则表达式都是内置对象
- 宿主对象:由 Javascript 解释器所嵌入的宿主环境(如 Web 浏览器)定义的,如客户端 JavaScript 中的
HTMLElement
对象。宿主对象也可以当做内置对象 - 自定义对象:运行中的 JavaScript 代码创建的对象
- 自有属性:直接在对象中定义的属性
- 继承属性:在对象原型对象中定义的属性
无评论