kackb00n: "Vererbung"

Beitrag lesen

Hallo,

ich hab mir jetzt schon einiges zum Prototyping in Javascript durchgelesen, komme aber irgendwie nicht weiter.

Als erstes will ich hier mal in Java zeigen, was ich in Javascript umsetzen will:

public class A {
	private int a = 0;
	public int doSomething() {
		a++;
		return a;
	}
}

public class B extends A {
	private int b = 0;
	public int get() { return b; }
	public void set(val) { b = val; }
}

public class C extends B {
	@Override
	public void set(val) {
		if(val > 10) throw new Exception("error");
		
		super.set(val);
	}
}

Einer meiner Versuche es in Javascript zu implementieren:

function A() {
	var a = 0;
	this.doSomething = function() {
		a++;
		return a;
	}
}

function B() {
	A.call(this);
	
	var b = 0;
	this.get = function() { return b; };
	this.set = function(val) {
		b = val;
	}
}
B.prototype = Object.create(A.prototype);

function C() {
	B.call(this);
	
	this.set = function(val) {
		if(val > 10) throw new Error("error");
		
		C.prototype.set(val); // Uncaught TypeError: C.prototype.set is not a function
	}
}
C.prototype = Object.create(B.prototype);

Wenn ich es richtig verstehe wird bei C.prototype.set(val); der Fehler geworfen, weil ich in B die Funktion set direkt an die erzeugte Instanz hänge und nicht an deren Prototypen. Dann dachte ich mir, dass ich den Prototypen von C anders erstellen muss also habe ich C.prototype = Object.create(new B()); probiert. Da kamen dann aber nach get-Aufrufen falsche Werte. Meine Vermutung ist, dass dies dadurch geschieht, dass alle C-Instanzen nur auf die eine im Closure hängenden Variable b (siehe function B()) zugreifen.

Je mehr ich jetzt darüber lese um so verwirrter bin ich, deswegen wende ich mich jetzt an euch: Wie mach ich es richtig? Kann mir jemand für Obiges den Code in Javascript zeigen?

Danke im Voraus!

MfG kackb00n

akzeptierte Antworten