面向对象程序设计的核心是抽象化,即对象。而javascript中并没有类的概念,但却可以利用自身的特性创建自定义对象。ECMA-262把对象定义为:无序属性的集合,其属性可以包含基本值、对象或者函数。属性有两种类型:数据属性和访问器属性。而描述属性的各种特征称之为特性。数据属性包括的特性有[[Configurable]]、[[Enumerable]]、[[Writable]]和[[Value]];访问器属性包括的特性有[[Configurable]]、[[Enumerable]]、[[Get]]和[[Set]],以下介绍这些特性:
- [[Configurable]]表示能否通过delete删除属性从而重新定义属性,能否修改属性的特性,或者能否属性修改为访问器属性,这个特性默认值是true。
- [[Enumerable]]表示能否通过for-in循环返回属性,这个特性默认值是true。
- [[Writable]]表示能否修改属性的值;[[Value]]包含这个属性的数据值,这个特性默认值是true。
- [[Get]]读取属性时调用的函数,这个特性默认值是undefined。
- [[Set]]在写入属性时调用的函数,这个特性默认值是undefined。
- 通过Object对象defineProperty方法修改对象属性的特性,若调用此方法时,如果不指定configurable、enumerable和writable特性的默认值都是false。