2013-01-31 15 views
8

JavaScriptを使用したばかりで、オブジェクト指向の動作に困惑しています。 私は、をxyのメンバーで作成し、xyzというメンバーでPoint3Dクラスに拡張しようとしました。私が達成しようとしている 挙動が何かあるような、のは、C#でそれを言うてみましょう:JavaScriptで「スーパークラス」コンストラクタを呼び出す

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; } 
} 

私は多くのものを読んで、私は本当に私が探しているものを見つけるように見えることはありません。 は、ここで私はこれまでのところまで来ているものだ:明らかに間違っている

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 = new A(x, y)ような何かを行う必要があります知っているが、私は固定xy座標と変数zでプロトタイプを作成する必要はありません。 非常にシンプルでなければなりませんが、私はそれを得ていません。スーパークラスのコンストラクタを呼び出すことや、正しく動作させることができません。

答えて

13

JavaScriptのプロトタイプ継承は、探しているポリモフィックコンストラクタの種類を実行するために、いくつかの柔軟な方法を提供します。あなたの特定の例では、あなたがこのような何かをしたい:明示的prototypeconstructorを設定して騒ぎ

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のオブジェクト指向プログラミング(電子ブック)、または彼の他の本のプロトタイプと継承についてのディスカッションウェブデベロッパーのためのプロフェッショナルJavaScript

+0

ありがとう、私はナッツに行くと、それは簡単でした! 私は間違いなくそれらの本の少なくとも1つに読書をします。 – Cancer

関連する問題