面向对象编程强调的是数据与操作数据的行为本质上是互相关联的(当然,不同的数据有不同的行为),因此好的设计就是把数据以及和它相关的行为打包(或者说封装)起来。这在正式的计算机科学中有时被称为数据结构。
所有字符串都是String类的一个实例,也就是说它是一个包裹,包含字符数据和我们可以应用在数据上的函数。
类实例是由一个特殊的类方法构造的,这方法名通常和类名相同,被称为构造函数。这个方法的任务就是初始化实例所需要的所有信息(状态)。
类构造函数属于类,而且通常和类同名。此外,构造函数大多需要new来调,这样语言引擎才知道你想要构造一个新的类实例。
在面对类的语言中,你可以先定义一个类,然后定义一个集成前者的类。
后者通常被称为“子类”,前者通常被称为“父类”。
JavaScript 要简单得多:它本身并不提供“多重继承”功能。
在继承或者实例化时,JavaScript 的对象机制并不会自动执行 复制行为。简单来说,JavaScript 中只有对象,并不存在可以被实例化的“类”。一个对象并不会被复制到其他对象,它们会被关联起来(参见第 5 章)。 由于在其他语言中类表现出来的都是复制行为,因此 JavaScript 开发者也想出了一个方法来模拟类的复制行为,这个方法就是混入。接下来我们会看到两种类型的混入:显式和隐式。