对象可以被看做字符串到值的映射,这种数据结构具有多种叫法,如:散列、散列表、字典、关联数组
属性特性:
1. 可写,是否可以设置该属性的值
2. 可枚举,是否可以通过for/in循环返回该属性
3. 可配置,是否可以删除或修改该属性
对象拥有的三个相关的对象特性:
1. 对象的原型(prototype)指向另外一个对象(a),本对象(a)的属性继承至它的原型对象
2. 对象的类(class)是一个标识对象类型的字符串(new Array, new Object, new Error, new Date -- new 关键字后跟随的单词是否就是标识对象的类型)
3. 对象的扩展标记(extensible flag)指明了是否可以向该对象添加新属性。
使用术语区分JS中的三类对象和两类属性:
1. 内置对象(native Object):是由ECMAScript规范定义的对象、类。例如: 数组、函数、正则表达式、日期。
2. 宿主对象(host Object):是由Javascript解释器所嵌入的宿主环境所定义的(比如web浏览器)定义的。客户端javascript中表示网页结构的HTMLElement对象均是宿主对象。既然宿主环境定义的方法可以当成普通的Javascript函数对象,那么宿主对象也可当成内置对象。
3. 自定义对象(user-defined Object):是由运行中的Javascript创建的对象。
4. 自有属性(own property): 是直接在对象中定义的属性
5. 继承属性(inherited property):是在对象的原型对象(原型对象是否是构造函数???)中定义的属性
对象的创建有三种形式: 对象直接量、关键字new 和 (ECMAScript 5中的)Object.create() 函数来创建对象
1. 最简单的对象直接量 var a = {}; 这句话可被解释为我们直接创建了一个对象 "{}",并将它的引用地址复制给了 a
2. 关键字 new创建并初始化一个新对象:new 关键字后会跟随一个函数调用 var a = new Array();
1> 构造函数: new 关键字后跟随的函数,我们称为构造函-)当新创建一个函数时,他只是普通函数,只有该函数被new运算符初始化后,我们才称该函数是构造函数。
2> Javascript 语言核心中的原始类型都包含内置函数。例如:new Array() / new RegExp() / new Object() / new Date()
3. Object.create()创建对象(假设为a): 第一个参数代表所创建对象(a)的原型,第二个为可选参数用于对第一个参数(对象)的属性进行描述【配置属性特性,上面有介绍属性特性】 var a = Object.create({ x:1, y:2 }); a继承了属性 x和y
1> 可以通过将第一个参数传入null创建一个没有原型的对象,但是这种方式创建的对象不会继承任何东西,甚至不包括基础方法,比如: toString(), 它将不能和 “+“ 运算符一起正常工作。
2> 创建一个普通的空对象 var o3 = Object.create(Object.prototype);