2013-01-31 16 views
8

Po prostu włączyłem JavaScript i jestem trochę zaskoczony jego obiektowym zachowaniem. Właśnie próbowałem utworzyć klasę Point2D z członkami x, y i rozszerzyć ją o klasę Point3D z członkami x, y, z. Zachowanie Próbuję osiągnąć coś takiego jak, powiedzmy w C#:Wywołanie konstruktora "nadklasy" w kodzie 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; } 
} 

Czytałem wiele rzeczy, ale nie wydaje się naprawdę znaleźć to, czego szukam. Oto co mam wymyślić do tej pory:

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

co jest oczywiście błędne.

Teraz wiem, że muszę coś zrobić jak Point3D.prototype = new A(x, y) ale nie chcę, aby stworzyć prototyp z stałychx, y współrzędnych i zmiennym z. To musi być bardzo proste, ale po prostu go nie dostaję, nie mogę wywołać konstruktora nadklasy ani sprawić, żeby działał poprawnie.

Odpowiedz

13

Dziedziczenie prototypów JavaScript zapewnia kilka różnych elastycznych sposobów wykonywania typów polimorficznych konstruktorów, których szukasz. W danym przykład, chcesz coś takiego:

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

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

rozdrażnienie z jawnie ustawienie constructor na prototype nie jest to bezwzględnie konieczne tutaj. (Jest to naprawdę konieczne tylko wtedy, gdy tworzysz prototyp "wszystko naraz" - np. Z obiektem).

W celu szczegółowego omówienia JavaScriptu zorientowanego obiektowo, polecam Nicholas Zakas 'Principles of Programowanie obiektowe w JavaScript (ebook) lub omówienie prototypów i dziedziczenia w jego drugiej książce, Profesjonalny kod JavaScript dla programistów WWW.

+0

Dziękuję bardzo, miałem ochotę i to było takie proste! Zdecydowanie daję lekturę przynajmniej jednej z tych książek. – Cancer

Powiązane problemy