你好,我是周爱民。欢迎你回到我的专栏。
如果你听过上一讲,那么你应该知道,接下来我要与你聊的是 JavaScript 的面向对象系统。
最早期的 JavaScript 只有一个非常非常弱的对象系统。我用过 JavaScript 1.0,甚至可能还是最早尝试用它在浏览器中写代码的一批程序员,我也寻找和收集过早期的 CEniv 和 ScriptEase,只为了探究它最早的语言特性与 JavaScript 之间的相似之处。
然而,不得不说的是,曾经的 JavaScript 在面向对象特性方面,在语法上更像 Java,而在实现上却是谁也不像。
JavaScript 1.0~1.3 中的对象
在 JavaScript 1.0 的时候,对象是不支持继承的。那时的 JavaScript 使用的是称为“类抄写”的技术来创建对象,例如:
function Car() {
this.name = "Car";
this.color = "Red";
}
var x = new Car();
关于类抄写以及与此相关的性质,我会在后续的内容中详细讲述。现在,你在这里需要留意的是:在“Car()”这个函数中,事实上该函数是以“类”的身份来声明了一系列的属性(Property)。正是因此,使用new Car()来创建的“类的实例”(也就是对象this)也就具有了这些属性。
这样的“类 -> 对象”的模型其实是很简单和粗糙的。但 JavaScript 1.0 时代的对象就是如此,并且,重要的是,事实上直到现在 JavaScript 的对象仍然如此。ECMAScript 规范明确定义了这样的一个概念: