JavaScript Seltsame Fehler bei Instanzierung :Uncaught TypeError: object is not a function

sherlock_h

Newbie
Registriert
März 2015
Beiträge
5
Moin Moin,

für eine Abgabe in einem Uni-Kurs sollen wir verschiedene Algorithmen in Javascript implementieren. Da ich leider keine Vorkenntnisse habe hänge ich nun an einer sehr seltsamen Stelle:

Code:
meineKnoten = [];
        meineKanten = [];

        //Graph: 0 --1--> 1 --2--> 2 --3-->3
        //Längster Pfad für n = Summe (0+1+2+...n) --> für 0-199 Knoten = 
        for (var i = 0; i < 200; i++)
        {
            meineKnoten.push(new knoten(i));
            if ( i >= 1)
            {
                console.log(meineKnoten[i - 1]);
                console.log(meineKnoten[i], i);
                neueKante = new kante(meineKnoten[i - 1], meineKnoten[i], i);
                meineKanten.push (neueKante);
            }

        }
Das Instanzieren von dem Typ knoten geht ohne Probleme. Beim einer neuen Kante gibt der Chrome-Debugger jedoch die Meldung "Uncaught TypeError: object is not a function" für Zeile 13 aus. Dabei sollte kante jedoch wie knoten funktionieren

Code:
  kante = function (quelle, ziel, gewicht) {
            this.quelle = quelle;
            this.ziel = ziel;
            this.gewicht = gewicht;
           [...]
            }
        }

Ich sehe keinen Grund, weshalb sich das Instanzieren von knoten & kanten unterschiedlich verhalten sollte. Noch weniger kann ich verstehen, wie der Interpreter für Zeile 13 eine function erwarten könnte.
 
Zeile 13 ist eigentlich ein korrekter Aufruf. Steht die Zuweisung "kante = function()..." vor der Schleife im Code?

Ansonsten würde ich empfehlen einfach ohne "Konstruktor" Funktion zu arbeiten. Man kann in js einfach Objekte zur Laufzeit erstellen z.B.

Code:
array.push({
  a: "hallo",
  b: "welt"
})

array[0].a //...
Das ist auch deutlich simpler zu lesen.
"new" macht höchstens bei Vererbungen in js Sinn. Und da auch nur optional.
 
Hey Toastbrot,

vielen Dank für deine Antwort.
so ganz habe ich nicht verstanden, wie neue Objekte (die auch Parameter benötigen) ohne den new-Operator erzeugt werden können. Die ganze Sache ist mir überhaupt schleierhaft. Zu gegebener Zeit, werde ich mich noch einmal mit js beschäftigen, denn ein paar nette Features hat die Sprache ja, aber für heute bin ich erstmal damit durch.
 
Zurück
Oben