JavaScript 的面向对象
JavaScript 是面向对象的编程语言(OOP),但又与通常的 C++,Java 等面向对象语言有所差别,如 JavaScript 中没有类(class)的概念。因此在按照 OOP 的思维来编写 JavaScript 代码时,总会有点那么不自然的感觉。
实际上,JavaScript 是基于对象(object-based)的语言,可以认为 JavaScript 里面所有东西几乎都是对象。在前面的教程及实例中,虽然我们几乎没提及对象的概念,但学习完本章之后,您就会知道,其实它们都是基于对象的。
什么是对象?
对象是一些属性和方法的集合。下面用一个简单的例子来帮助理解一下什么是对象及与对象有关的一些概念。例如我们一个人,就是一个对象,那么:
属性与方法:人有名字,有身高体重等特征,这些特征我们称为对象的属性。人能说话,能走路,这种能力我们称之为对象的方法。
私有方法与公共方法:一个人在学习了编程语言之后可以写程序,在学习了外语之后可以当翻译,这种个别对象才有的能力我们称之为对象的私有方法。反之,上面说话,走路等人人都具备的方法,称之为对象的公共方法。
封装:同样的两个人学习了编程语言,虽然都可以写程序,但由于是两个不同的对象,往往在写程序上是有差别的。对象的某些数据和代码可以是私有的,不能被外界访问,称之为封装。
继承:继承本是类里面的概念。继承是指子类通过继承(extends)父类,从而获得父类的属性与方法(私有属性和方法除外)。这就如一株大树,通过继承层层叠进,使最终的程序层次清晰而又功能强大。由于 JavaScript 语言没有类的概念,因此其本身并不直接提供继承功能,但现在有不少人和一些 JavaScript 框架,都在尝试让 JavaScript 具有继承的能力。
多态:多态是指不同事物具有不同表现形式的能力。多态机制使具有不同内部结构的对象可以共享相同的外部接口,通过这种方式减少代码的复杂度。遗憾的是,同继承一样,JavaScript 也不支持多态这一 OOP 中非常重要的概念。当然也有不少人和 JavaScript 框架尝试着间接实现 JavaScript 的多态性。
鉴于篇幅及本教程的宗旨,关于对象的一些基本概念简单描述到此为止。面向对象编程是一门专门的学科,感兴趣的同学可以另外阅读关于 OOP 专门的著作。
JavaScript 对象总结
对象是一种数据结构或者类似于数组结构,包含了各种属性,以及对这些数据进行操作的方法。JavaScript 是松散类型的语言,因此可以动态地增加属性到对象中。JavaScript 中对象的数据类型是 object。