2013-01-31 18 views
8

Ich habe gerade in JavaScript und ich bin etwas verwirrt durch seine objektorientierte Verhalten. Ich habe nur versucht, eine Klasse zu erstellen Point2D mit x, y Mitglieder und erweitern sie mit einer Point3D Klasse mit x, y, z Mitglieder. Das Verhalten ich versuche zu erreichen, so etwas wie, sagen wir, es in C#:Invoke "Superklasse" -Konstruktor in 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; } 
} 

ich eine Menge Sachen zu lesen, aber ich scheine nicht wirklich zu finden, was ich suche. Hier ist, was ich bisher habe kommen:

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

was offensichtlich falsch ist.

Nun, ich weiß, ich sollte wie Point3D.prototype = new A(x, y) etwas tun, aber ich möchte nicht, einen Prototyp mit festenx, y Koordinaten und variable z erstellen. Es muss sehr einfach sein, aber ich bekomme es einfach nicht, ich kann nicht scheinen, den Superklassenkonstruktor zu nennen oder es sich richtig zu verhalten.

Antwort

13

Die prototypische Vererbung von JavaScript bietet ein paar verschiedene flexible Möglichkeiten, um die Art von polymorphen Konstruktoren auszuführen, nach der Sie suchen. In Ihrem speziellen Beispiel Sie so etwas wie dies wollen:

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

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

Füssing mit explizit die constructor auf dem prototype Einstellung ist nicht unbedingt notwendig, hier. (Es ist wirklich nur notwendig, wenn Sie den Prototyp "auf einmal" erstellen - zB mit einem Objekt.)

Für eine detaillierte Diskussion von objektorientierten JavaScript, würde ich Nicholas Zakas Principles empfehlen Objektorientierte Programmierung in JavaScript (Ebook) oder die Diskussion von Prototypen und Vererbung in seinem anderen Buch, Professional JavaScript für Web-Entwickler.

+0

Vielen Dank, ich war verrückt und es war so einfach! Ich werde definitiv mindestens eines dieser Bücher lesen. – Cancer

Verwandte Themen