Frage OOP: Konstruktor-Funktion + Prototyp (Vererbung)

  • Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

mehmet_b_90

Neues Mitglied
24 August 2019
19
0
1
29
Hallo zusammen,

bin gerade dabei mich in JavaScript einzuarbeiten. Momentan geht es um die OOP-Programmierung inkl. Vererbung in JavaScript. Dabei gibt es ja mehrere Alternativen. Unter anderen die oben genannte Konstruktor-Funktionen + Prototyp.

Laut Lehrbuch ist folgender Code aufgeschrieben, der aber bei mir nicht laufen möchte:

JavaScript:
"use strict";

function Fahrzeug(farbe, leistung, preis) {
    this.farbe = farbe;
    this.leistung = leistung;
    this.preis = preis;
}

function PKW(farbe, leistung, preis, typ) {
    this.base = Fahrzeug;
    this.base(farbe, leistung, preis);
  
    this.typ = typ;
}

PKW.prototype = new Fahrzeug;

let audi = new PKW("Schwarz", 225, 25000, "Limousine");

for (let i in audi) {
    document.write(i + ": " + PKW[i] + "<br>");
}

Das Ergebnis dabei ist immer die folgende:

HTML:
farbe: undefined
leistung: undefined
preis: undefined
typ: undefined
Was ist da falsch?

PS: Habe auch gelesen, dass jede Funktion in JavaScript automatisch auch ein Objekt ist. Ist das richtig?
 

mehmet_b_90

Neues Mitglied
24 August 2019
19
0
1
29
Danke! Ich habe den Fehler gefunden:

Falsch:
JavaScript:
document.write(i + ": " + PKW[i] + "<br>");
Richtig:
JavaScript:
document.write(i + ": " + audi[i] + "<br>");
Ich schau 50 mal darüber und sehe es erst nach deinem Beitrag. Oh man. :D
 

basti1012

Senior HTML'ler
26 November 2017
1.116
113
63
39
Minden
sebastian1012.bplaced.net
Das ist schön wenn es jetzt bei dir klappt.
Ich verstehe aber eins noch nicht so richtig in den Thema.
Wenn ich jetzt deinen Code mit dieser Schleife nutze
JavaScript:
for(var key in audi){
   if (typeof(audi[key]) == "function")
      continue;
document.write(key+' = '+audi[key]+'<br>');
}
Bekomme ich dein erwünschtes Ergebniss

farbe = Schwarz
leistung = 225
preis = 25000
typ = Limousine

Lasse ich die typeof Abfrage weg
JavaScript:
for(var key in audi){
        document.write(key+' = '+audi[key]+'<br>');
}
kommt dieses Ergebniss raus

base = function Fahrzeug(farbe, leistung, preis) { this.farbe = farbe; this.leistung = leistung; this.preis = preis; }
farbe = Schwarz
leistung = 225
preis = 25000
typ = Limousine


Das ist so nee sache die ich noch nicht ganz verstehe.
Hat da einer nee erklärung für oder ein Link wo das erklärt wird `?
Ich konnte da noch nix finden was ich ( IQ unter 30 ) auch verstehe
 

mehmet_b_90

Neues Mitglied
24 August 2019
19
0
1
29
Wird wahrscheinlich am folgende Anweisung, in Zeile 2, liegen:

JavaScript:
function PKW(farbe, leistung, preis, typ) {
    this.base = Fahrzeug;
    this.base(farbe, leistung, preis);
 
    this.typ = typ;
}
 
Werbung: