是的,只要对 JavaScript 中的“类”如何工作有一点了解,这是可能的。
JavaScript 类基础
(如果你已经知道这一点,你可以跳过这部分)
JavaScript 中的“类”实际上只是一个具有名为prototype
. 此prototype
属性提供默认实例方法和属性。
让我们以两个示例类Point
和Point3D
.
function Point(x, y) {
this.x = x;
this.y = y;
}
Point.prototype = {
x: 0,
y: 0,
constructor: Point,
isAbove: function(point) {
return this.y > point.y;
},
isBelow: function(point) {
return this.y < point.y;
}
};
该类Point
是我们的基类,表示 x 和 ay 坐标。该类Point3D
继承自Point
并具有 az 坐标(忽略任何数学错误)。
function Point3D(x, y, z) {
Point.call(this, x, y);
this.z = z;
}
Point3D.prototype = new Point(0, 0);
Point3D.prototype.constructor = Point3D;
Point3D.prototype.isAbove = function(point) {
return Point.prototype.isAbove.call(this, point);
};
Point3d.prototype.isDiagonal = function(point) {
return Point.prototype.isAbove.call(this, point)
&& this.x > point.x;
};
在isDiagonal
方法中,我们调用isAbove
Point 类的方法,尽管 Point3D 实现了自己的版本。
调用重写的方法
您可以使用此基本模板在任何类上调用任何覆盖的方法:
ClassName.prototype.method.call(this, arg1, arg2, ... argN);