OOP (Javascript)

Ich versuche zurzeit das objektorientierte Programmieren nachzuvollziehen, im Moment mit Javascript.
So an sich versteh ich es, aber ein paar Dinge kann ich nicht so umsetzen wie ich das gerne würde.

var PeterDuck;
function Ente(gr,al,quaktext)

{

	this.groesse=gr

	this.alter=al
	this.quak=quak

}

function quak(text)
{
	alert(text)
}
function stra (d)

{

	this.kost=d;

}


function Stadt(x,y)

{

    this.Steuern=x

    this.miete=y

}



function Entenhausener(str)

{

    this.Straße=new stra(50)

}

Entenhausener.prototype=new Stadt(40,70)


PeterDuck=new Ente(1.20,37,"quaaaaak")

PeterDuck=new Entenhausener("ErpelStraße")

Gleich unten seht ihr das erste Problem:
Gibt es eine Möglichkeit, dass ein Objekt zu zwei Klassen gehört? Denn so funktioniert nur eine der beiden.

Ist es möglich, dass jede Ente einen bestimmten quak hat und dass ich den Parameter “text” von der FUnktion quak schon in der beschreibung der Methode ändern kann?

Wenn ich die Straße nicht nur als Namen angeben möchte sondern als Objekt, sodass ich später abragen kann: PeterDuck.strasse.länge, und nicht alle Entenhausener in derselben Straße vohnen sollen, wie mach ich das?

Ich danke euch vielmals.

Das Prototyping ist nicht ganz trivial und zum oop lernen ist js damit uU nicht die optimale sprache.
Google mal nach Tuts, gibt gute.

String sind Objekte.

Nach Javascript werde ich wahrscheinlich mit PHP weitermachen und mich dann auch dort mit dem Konzept beschäftigen.
Aber das eigentliche System habe ich ja sogar schon, mir fehlt nur noch die Umsetzung der drei oben genannten Probleme. Ich würde mich freuen wenn es jemand mir erklären könnte.

[quote]Gibt es eine Möglichkeit, dass ein Objekt zu zwei Klassen gehört? Denn so funktioniert nur eine der beiden.[/quote]Nein.
Das Objekt zeichnet sich dadurch aus, exakt der einen Klasse zu “entsprechen” (mir fiel grad kein passenderes wort ein), aus der es erstellt wurde.
Normalerweise gibts bei OOP die Möglichkeit eine Klasse zu “erweitern” (extend) - dies ist mir bei Javascript jedoch nicht bekannt (womöglich hab ich mich damit zu wenig beschäftigt)
Das sähe dann so aus (absichtlich PHP-ähnlich):

class Ente {...} class Entenhausener extends Ente {...}
Bei PHP gibts da ja auch noch die Interfaces, die man Implementieren kann (diese sagen jedoch nicht, was eine Funktion macht, sondern nur, dass sie da ist bzw was sie tun sollte).

Zurück zum Problem. In Javascript könnte ich mir vorstellen, dass du eine Eigenschaft in der Ente machst, der du dann (per Konstruktor) ein entsprechendes Objekt von Entenhausener zuweist.

[quote]Ist es möglich, dass jede Ente einen bestimmten quak hat und dass ich den Parameter “text” von der FUnktion quak schon in der beschreibung der Methode ändern kann?[/quote]Meinst du sowas?

function Ente(quak_text) { quak = function() { alert(quak_text); } } Ente1 = new Ente("quaki"); Ente2 = new Ente("quääääk");

Ein String ist ansich schon ein Objekt und verfügt über die Eigenschaft length (=länge (englisch))
Sieht mir aus, als hättest du dich doch noch nicht so umfassend damit beschäftigt, denn dafür gibts die privaten Eigenschaften (bzw Methoden). Die privaten Eigenschaften deklarierst du ganz einfach mit var (also var Strasse).

[quote=“bcg”]
Normalerweise gibts bei OOP die Möglichkeit eine Klasse zu “erweitern” (extend) - dies ist mir bei Javascript jedoch nicht bekannt (womöglich hab ich mich damit zu wenig beschäftigt[/quote]

Wie schon gesagt: prototyping