Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
援引;“超类”;JavaScript中的构造函数_Javascript_Inheritance_Polymorphism - Fatal编程技术网

援引;“超类”;JavaScript中的构造函数

援引;“超类”;JavaScript中的构造函数,javascript,inheritance,polymorphism,Javascript,Inheritance,Polymorphism,我刚刚接触了JavaScript,对它的面向对象行为感到困惑。 我只是想创建一个包含x,y成员的Point2D类,并用一个包含x,y,z成员的Point3D类对其进行扩展。 我试图实现的行为类似于,让我们用C#来说: 我读了很多东西,但我似乎没有真正找到我要找的东西。 以下是我到目前为止得出的结论: function Point2D(x, y) { this.x = x; this.y = y; } Point2D.prototype.constructor = Point2D; functio

我刚刚接触了JavaScript,对它的面向对象行为感到困惑。 我只是想创建一个包含
x
y
成员的
Point2D
类,并用一个包含
x
y
z
成员的
Point3D
类对其进行扩展。 我试图实现的行为类似于,让我们用C#来说:

我读了很多东西,但我似乎没有真正找到我要找的东西。 以下是我到目前为止得出的结论:

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);
这显然是错误的

现在,我知道我应该做一些类似于
Point3D.prototype=newa(x,y)
的事情,但我不想创建一个带有固定
x
y
坐标和变量
z
的原型。
它必须非常简单,但我只是不明白,我似乎无法调用超类构造函数或使其正常运行。

JavaScript的原型继承提供了两种不同的灵活方法来执行您正在寻找的多态构造函数。在您的特定示例中,您需要以下内容:

function Point2D(x, y) {
  this.x = x;
  this.y = y;
}

function Point3D(x, y, z) {
  Point2D.call(this, x, y);
  this.z = z;
}
原型
上明确设置
构造函数
的麻烦在这里并不是绝对必要的。(只有在“同时”创建原型(例如,使用对象)时,才需要使用此选项。)


关于面向对象JavaScript的详细讨论,我推荐Nicholas Zakas的《JavaScript中的面向对象编程原理》(电子书),或者在他的另一本书《面向Web开发人员的专业JavaScript》中对原型和继承的讨论。

非常感谢,我快疯了,就这么简单!我肯定会读至少一本这样的书。
function Point2D(x, y) {
  this.x = x;
  this.y = y;
}

function Point3D(x, y, z) {
  Point2D.call(this, x, y);
  this.z = z;
}