· 537 words · 3 min
Object 在英文中,是一切事物的总称,和面向对象编程(Object Oriented Programming,OOP)的抽象思维有共通之处。 对象并不是计算机领域凭空造出来的概念,它是顺着人类思维模式产生的一种抽象,因此 OOP 也被认为是更接近人类思维模式的一种编程范式。
不同的编程语言中,设计者利用各种语言的特性来抽象描述对象,最为成功的是使用“类”(class)的方式, 因此也诞生了经典的面向对象语言 C++、Java 等。
对象的的本质特征有如下几点:
在 JS 中,对象的状态和行为被抽象成为了属性。在实现了对象基本特征的基础上, JS 中的对象特色是:对象具有高度的动态性,因为 JS 赋予了开发者在运行时改变状态和行为的能力。 为了提高抽象,JS 的对象属性又可以分为数据属性和访问器属性。JS 中,用一组特征(attribute)来描述属性(property)。
数据属性四个特征:value
、writable
、enumerable
、configurable
。
访问器属性四个特征:getter
、setter
、enumerable
、configurable
。
使用 getOwnPropertyDescriptor
查看数据属性,使用 defineProperty
可以改变属性的特征。
因此,JS 的对象运行时是一个“属性的集合”,属性以字符串或者 Symbol 为 key,以数据属性特征值或访问器属性特征值为 value。
JS 的对象设计跟目前主流基于类的面向对象差异非常大,因此出现了“JS 不是面向对象”的说法。 但 JS 完全提供了运行时高度动态的对象系统,可以模仿多数面向对象的编程范式,因此也是正统的面向对象语言。