js 面向对象_1_对象
更新日期:
理解对象
ECMAScript 中没有类的概念。
ECMA-262 把对象定义为:“无序属性的集合,其属性可以包含基本值、对象或者函数。”
我们可以把 ECMAScript 的对象想象成散列表:无非就是一组名值对,其中值可以是数据或函数。
创建对象的方法。
早期,最简单的方式就是:先创建一个 Object 实例,再给它添加属性和方法。如下:
|
|
后来,用对象字面量创建。如下:
|
|
无论哪种方式,所创建的对象 person 都有相同的属性和方法。
这些属性在创建的时候,就带有一些特征值,js 就通过这些特征值来定义它们的行为。
属性类型
ECMA-262 定义这些属性特性是为了实现 Javascript 引擎用的,所以在 Javascript 中不能直接访问它们。为了表示特性是内部值,该规范就把它们放在了两对方括号中,eg. [[Enumerable]]。
ECMAScript 中有两种属性:数据属性和访问器属性。
数据属性
数据属性有4个描述其行为的特性:
- [[Configurable]]:能否被 delete 删除,能否修改其特性。默认 true
- [[Enumerable]]:能否通过 for-in 循环取。默认 true
- [[Writable]]:能否修改属性的值。默认 true
- [[Value]]:存着属性本身的值。默认 undifined
要修改属性默认的特性,必须使用 ECMAScript 5 的 Object.defineProperty() 方法。但具体实现上,不同浏览器版本中又会有差异。到用到时再细查。
多数情况下,我们都用不到要修改这些特性,但理解这些概念有助于理解 Javascript 对象。
访问器属性
访问器属性不包含数据值。它们包含一对 getter 和 setter 函数(当然,都不是必需的)。
访问器属性有如下4个特性。
- [[Configurable]]:能否被 delete 删除,能否修改属性的特性。默认 true
- [[Enumerable]]:能否通过 for-in 循环读取。默认 true
- [[Get]]:读取属性时调用的函数。默认 undifined
- [[Set]]:写入属性时调用的函数。默认 undifined
访问器属性不能直接定义,必须使用 Object.defineProperty() 来定义。