Java:面向对象编程语言,吸收了C++语言的各种优点,丢掉了C++让人头疼的多继承、指针等概念。具有功能强大和简单易用的两大特征。Java具有简单性、面向对象、分布式、健壮性、安全性、平*立与可移植性、多线程、动态性等特点。
JavaScript:直译式脚本语言,一种动态类型、弱类型、基于原型的语言,内置支持类型。其解释器叫做JavaScript引擎,是浏览器的一部分,较多的用在客户端的脚本语言。是一种解释性脚本语言、可为页面添加交互行为、可直接嵌入HTML页面、具有跨平台型,可在多种平台下运行。
基于类(Java)和基于原理(JavaScript)的对象系统的比较:
基于类的(java) | 基于原型的(JavaScript) |
类和实例是不同的事物。 | 所有对象均为实例。 |
通过类定义来定义类;通过构造器方法来实例化类。 | 通过构造器函数来定义和创建一组对象。 |
通过 new 操作符创建单个对象。 |
通过 new 操作符创建单个对象。 |
通过类定义来定义现存类的子类,从而构建对象的层级结构。 | 指定一个对象作为原型并且与构造函数一起构建对象的层级结构 |
遵循类链继承属性。 | 遵循原型链继承属性。 |
类定义指定类的所有实例的所有属性。无法在运行时动态添加属性 | 构造器函数或原型指定初始的属性集。允许动态地向单个的对象或者整个对象集中添加或移除属性 |
举个栗子(Employee):
1.Employee的层级结构:
-
Employee
具有name
属性(默认值为空的字符串)和dept
属性(默认值为 "general")。 -
Manager
是Employee的子类。它添加了
reports
属性(默认值为空的数组,以Employee
对象数组作为它的值)。 -
WorkerBee
是Employee的子类
。它添加了projects
属性(默认值为空的数组,以字符串数组作为它的值)。 -
SalesPerson
是WorkerBee的子类
。它添加了quota
属性(其值默认为 100)。它还重载了dept
属性值为 "sales",表明所有的销售人员都属于同一部门。 -
Engineer
基于WorkerBee
。它添加了machine
属性(其值默认为空的字符串)同时重载了dept
属性值为 "engineering"。
2.下面关于 Employee
的 Java 和 JavaScript 的定义是非常类似的。唯一的不同是在 Java 中需要指定每个属性的类型,而在 JavaScript 中则不需要,同时 Java 的类必须创建一个显式的构造器方法。
3.Manager
和 WorkerBee
的定义表示在如何指定继承链中上一层对象时,两者存在不同点。在 JavaScript 中,您会添加一个原型实例作为构造器函数prototype
属性的值,而这一动作可以在构造器函数定义后的任意时刻执行。而在 Java 中,则需要在类定义中指定父类,且不能在类定义之外改变父类。
4.在对Engineer
和 SalesPerson
定义时,创建了继承自 WorkerBee
的对象,该对象会进而继承自Employee
。这些对象会具有在这个链之上的所有对象的属性。另外,它们在定义时,又重载了继承的 dept
属性值,赋予新的属性值。