对象是 JavaScript 的核心概念之一,也是最常用的数据类型,即引用数据类型。 ECMAScript 中的对象其实就是一组数据和功能的集合。对象可以包含多个属性。属性以名值对的形式存在,名称是字符串,值可以是任何类型的数据。字符串到值的映射,构成一个无序的集合。除了字符串、数字、 true 、 false 、 mull 、 undefined 之外, JavaScript 中的值都是对象。
JavaScript 对象其实就是属性的集合(以及一个原型对象)。这里的集合与数学上的集合是等价的,即具有确定性、无序性和互异性。也就是说,给定一个 JavaScript 对象,我们可以明确知道一个属性是不是这个对象的属性,对象中的属性是无序的,并且是各不相同的(如果有同名的,则后声明的覆盖先声明的)。
对象只是属性的容器,每个属性都有一个名称和一个值。 JavaScript 采用具有命名值属性的容器(即对象)这一概念作为在 JavaScript 中表达值的构建块。
这种编程方式的特点是把数据保存到变量里,然后由一系列指令操作变量。每个指令(或一系列指令,比如函数)都能够创建、删除或修改数据,显得数据与程序代码在某种程度上是" 分离" 的。
在面向对象编程( OOP )方式中,程序指令与其操作的数据密切关联。换句话说, OOP 把程序的数据包含在叫作" 对象" 的独立体里,每个对象都有自己的属性(数据)和方法(指令)。
面向对象 | 背对对象 |
---|---|
Methods 方法 | Functions 函数 |
Objects 对象 | Modules 模块 |
Massages 消息 | Argument 参数 |
Attribute 属性 | Variable 变量 |
面向过程编程也是把程序定义为" 数据 + 作用于这些数据上的操作(算法)" ,但最重要的区别是:面向过程编程使用过程操作数据结构,而面向对象编程将过程和数据结构捆绑在一起,使一个对象操作自己的数据结构。
在 20 世纪 80 年代以前, IT 产业尚未有今天这样发达,程序一般都非常小,也易于更改,最常见的声明通常是赋值语句。但是,随着程序变得越来越大,开发人员所注意的重点也在不断改变,对于超过 10000 行代码的程序,最常见的语句通常是对子程序的过程(函数)调用,这时,确保参数正确地传递给子程序成为一个主要问题。
由于用户的需求和软、硬件技术的不断发展变化,按照功能划分设计的系统模块必然是易变的和不稳定的,这样开发出来的模块可重用性不高。面向对象程序设计从所处理的数据入手,以数据为中心而不是以服务(功能)为中心来描述系统。它把编程问题视为一个数据集合,数据相对于功能而言,具有更强的稳定性。
面向对象程序设计同结构化程序设计相比,最大的区别就在于前者首先关心的是所要处理的数据,而后者首先关心的是功能。
面向对象的优点
代码复用。面向对象编程能够以多种方式复用代码。利用普通的函数也能实现代码复用,但跟踪全部需要传递的变量、它们的作用域和含义是很困难的。与之相比,如果使用对象来实现,只需要标明每个对象的属性和方法,保证它们遵守规则,其它程序(甚至其它程序员)都可以轻松地使用这些对象
ECMAScript 5 新增 3 个函数用来设置对象属性的特性 : object.seal 、 Object.freeze 和 Object.preventExtensions 。