原型,以及为什么它们很棒。
在我开始之前,Mozilla 可以比我写得更好:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Introduction_to_Object-Oriented_JavaScript
和你一样我也有传统 OO 语言的背景,我真正学习的第一门编程语言是 C++,我认为它是最棒的。在许多方面,C++ 是一门很棒的语言,这就是为什么在其中编码the best JavaScript engine。
然而,不同之处在于 JavaScript 的工作方式。 C++ 是严格类型化的,类必须包含它们所包含的确切数据类型:
class Rectangle {
int width, height;
public:
void set_values (int,int);
int area() {return width*height;}
};
与 C++ 不同,JavaScript 中几乎所有内容都是 Object,并且可以使用点符号轻松扩展
var derek = "Derek Howard";
derek.age = 16;
由于 JavaScript 是动态编译的,因此非常灵活。我们可以随时扩展现有对象,而不是像 Object 这样的僵硬骨架。
然而,在许多情况下,我们希望拥有一大堆看起来相同但有自己的数据的对象(就像 C++ 中的类)。这就是prototype 对象发挥作用的地方。
如何在 Javascript 中创建“类”?
我将在 JavaScript 中重新创建上面的矩形对象来演示。
第一步是创建一个Function 来定义你的类名。这应该大写以表示它是一个“类”
第一个函数(大写的)是你的构造函数。您应该使用它将基本初始值传递给您的Object
function Rectangle(width, height) {
this.width = width || 1;
this.height = height || 1;
}
|| 操作符使得如果开发人员不将值传递给构造函数,它仍然具有默认值。
然后,要将函数添加到您的“类”中,您需要在原型上创建函数。
Rectangle.prototype.area = function () {
return this.width * this.height;
}
您已完成创建类!现在使用你的类。
使用类其实和C++很相似。您只需创建一个对象并使用new 关键字:
var bigRec = new Rectangle(42, 100);
然后你就可以直接在新对象上调用你在Rectangle.prototype上创建的函数了:
alert(bigRec.area());
//new class
function Rectangle(width, height) {
//class properties
this.width = width || 1;
this.height = height || 1;
}
//class functions
Rectangle.prototype.area = function () {
return this.width * this.height;
}
//create a new Rectangle object
var bigRec = new Rectangle(42, 100);
//call functions created from the prototype
alert(bigRec.area());