javascript之对象

391 阅读2分钟

对象的特点有哪些

对象的特点:

  • 1、对象具有唯一标识性,即使完全相同的两个对象,也并非同一个对象。
  • 2、对象有状态,同一个对象可能处于不同状态之下
  • 3、对象具有行为,对象的状态会因为行为产生变迁

对象具有唯一标识的内存地址,所以具有唯一的标识性。js中将状态和行为统一抽象为属性。

js中对象的特征

js中对象独有的特色是,对象具有高度的动态性,因为js赋予了使用者在运行时为对象添改状态和行为的能力

var obj = {a:'a'};
obj.b = 'b';

为了提高抽象能力,js 的属性被设计成比别的语言更加复杂的形式,它提供了数据属性和访问器属性(getter/setter)两类

js对象的两类属性

对 js 来说,属性并非只是简单的名称和值,js 用一组特征(attribute)来描述属性(property)

1、数据属性

  • configurable,决定该属性能否被删除或者改变特征值
  • enumerable,决定for...in能否被枚举改属性
  • value,就是属性的值
  • writable,决定属性能否被赋值

2、访问器(getter/setter)属性

  • getter函数或者undefined,在取属性值时被调用
  • setter函数或者undefined,在设置属性值时被调用
  • configurable,决定该属性能否被删除或者改变特征值
  • enumerable,决定for...in能否被枚举改属性

数据属性的特征writeable、enumerable、configurable 都是默认值为 true

var obj = {
	a: 'a’, 
    get c(){ return 'c'}
};
Object.defineProperty(obj, 'b', {
	value: 'b', 
    writable: false, 
    enumerable: false, 
    configurable: true
})

可以通过Object.defineProperty来改变属性的特征。在创建对象是,也可以使用get、set关键字来创建访问器属性。

访问器属性跟数据属性不同,每次访问属性都会执行 getter 或者 setter 函数

js 的对象设计跟目前主流基于类的面向对象差异非常大,它具有高度动态性的属性的集合。可事实上,这样的对象系统设计虽然特别,但是 js 提供了完全运行时的对象系统,这使得它可以模仿多数面向对象编程范式,所以它也是正统的面向对象语言。