Eig*_*rew 9 javascript polymorphism inheritance
我刚刚进入JavaScript,我对它的面向对象行为感到困惑.我只是想创建一个类Point2D用x,y成员和一个扩展它Point3D带班x,y,z的成员.我试图实现的行为是这样的,让我们在C#中说:
class Point2D
{
int x, y;
public Point2D(int x, int y) { this.x = x; this.y = y; }
}
class Point3D : Point2D
{
int z;
public Point3D(int x, int y, int z) : base(x, y) { this.z = z; }
}
Run Code Online (Sandbox Code Playgroud)
我读了很多东西,但我似乎并没有真正找到我想要的东西.这是我到目前为止所做的:
function Point2D(x, y) { this.x = x; this.y = y; }
Point2D.prototype.constructor = Point2D;
function Point3D(x, y, z) { Point2D.prototype.constructor.call(this); this.z = z; }
Point3D.prototype = new A(); // see latter explanation
Point3D.prototype.constructor = B;
var p = new Point3D(10, 20, 30);
Run Code Online (Sandbox Code Playgroud)
这显然是错的.
现在,我知道我应该做的事情,Point3D.prototype = new A(x, y)但我不想创建一个固定 x,y坐标和变量的原型z.它必须非常简单,但我只是没有得到它,我似乎无法调用超类构造函数或使其行为正常.
fou*_*ama 16
JavaScript的原型继承提供了几种不同的灵活方式来执行您正在寻找的那种多态构造函数.在您的特定示例中,您需要以下内容:
function Point2D(x, y) {
this.x = x;
this.y = y;
}
function Point3D(x, y, z) {
Point2D.call(this, x, y);
this.z = z;
}
Run Code Online (Sandbox Code Playgroud)
明确设置constructoron on的烦恼在prototype这里并不是绝对必要的.(当你一次性创建原型时,实际上只需要它 - 例如,使用一个对象.)
有关面向对象JavaScript的详细讨论,我建议使用Nicholas Zakas的JavaScript面向对象编程原理(电子书),或者在他的另一本书" 面向Web开发人员的专业JavaScript "中讨论原型和继承.
| 归档时间: |
|
| 查看次数: |
7203 次 |
| 最近记录: |