Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Garzec

Alter Hase

  • »Garzec« ist der Autor dieses Themas

Beiträge: 693

Wohnort: Gießen

  • Private Nachricht senden

1

21.04.2017, 20:52

Javascript Variable ist definiert aber als Parameter undefiniert

Hi,
ich versuche mich an einer sehr simplen Anwendung mit Javascript. Dabei speichere ich Objekte bei deren Erzeugung in einem Array in einem "Store" ab. Dieses Objekt bekommt den Store zusätzlich als Parameter übergeben, damit es sich selbst aus dem Store rauslöschen kann, falls gewollt.

Der übergebene Parameter ist dabei aber undefiniert.

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
// controller.CreateNote();          wird aufgerufen

//-------------------------------------------------------

class NoteController { // Die Controller Klasse
    constructor() {
        this.store = new NoteStore(); // Instanz vom Store
    }

    CreateNote() {
        var title = $("#edtNoteTitle").val(); // Titel des Objektes

        if (title.length < 1) // Titel ist leer
            return;
        else if ($.inArray(title, this.store.notes.map(n => n.title)) >= 0) // Titel existiert bereits
            return;

        this.store.AddNote(new Note(title, $("#edtNoteText").val()), this.store); // Objekt erzeugen und dem Store hinzufügen
    }
}

//-------------------------------------------------------

class NoteStore { // Datenklasse
    constructor() {
        this.notes = []; // Objektsammlung
    }

    AddNote(note) {
        this.notes.push(note); // Objekt hinzufügen
    }
}

//-------------------------------------------------------

class Note { // Das einzelne Objekt
    constructor(noteTitle, noteText, noteStore) {
        this.title = noteTitle; // Titel
        this.text = noteText; // Text
        this.store = noteStore; // Speicher
    }
}


In der Zeile

Quellcode

1
this.store.AddNote(new Note(title, $("#edtNoteText").val()), this.store);


ist die erste Nutzung von

Quellcode

1
this.store


gültig, danach ist der dritte Parameter undefiniert. Könnte mir ein Webspezialist da aushelfen?

2

21.04.2017, 21:21

Bin mir nicht zu 100% sicher aber ich vermute, dass "this" an der Stelle nicht mehr auf den NodeController verweist, sondern auf dein neues Note-Objekt.
Könntest versuchen es zu beheben, indem du vor dem Aufruf
var that = this;
schreibst und dann that.store verwendest ;)

MfG Mirac
"Wer Angst hat, dass ihm seine Ideen geklaut werden, der scheint nicht viele zu haben. "

Sylence

Community-Fossil

Beiträge: 1 663

Beruf: Softwareentwickler

  • Private Nachricht senden

3

21.04.2017, 21:28

Du versuchst die Methode AddNote mit 2 Parametern aufzurufen, obwohl die nur einen hat.
Du hast einfach die Klammern falsch gesetzt...

4

21.04.2017, 21:52

Okay klammern hab ich nicht gezählt, bin davon ausgegangen das wäre bei einem guten Editor klar :D
"Wer Angst hat, dass ihm seine Ideen geklaut werden, der scheint nicht viele zu haben. "

Garzec

Alter Hase

  • »Garzec« ist der Autor dieses Themas

Beiträge: 693

Wohnort: Gießen

  • Private Nachricht senden

5

21.04.2017, 22:30

Oh Gott, das ist jetzt peinlich...

Ich hab mir den Atom für den Anfang installiert, ohne Packages.. Ich mache eigentlich nur C#, das war jetzt ein Einstieg, bin an einen aggressiven Compiler gewöhnt, der mir Fehler um die Ohren haut :P

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

6

22.04.2017, 06:37

Das ist so gesehen ja nicht mal ein Fehler, das ist legal in JavaScript. Nur eben nicht das, was du tun wolltest ;) ESLint hift.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

7

22.04.2017, 08:03

Würde hier die Verwendung von "let" nicht sinn machen und das Problem besser erkennen lassen? Oder verstehe ich "let" falsch.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

8

22.04.2017, 08:58

Let würde bei falscher Verwendung von Klammern und Parametern rein gar nichts helfen, nö.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Garzec

Alter Hase

  • »Garzec« ist der Autor dieses Themas

Beiträge: 693

Wohnort: Gießen

  • Private Nachricht senden

9

22.04.2017, 13:07

Ich werde mir mal das ESLint anschauen :)

10

22.04.2017, 13:27

Mal ne allgemeine Frage. Kann man bei Javascript irgendwie typsicherheit bekommen. Bzw gibt es tools/Plugins/IDEs die JavaScript code auf so welche ungewollten verhalten überprüft? Bei JS habe ich immer das Gefühl machen zu können was ich will. Was wohl auch eine Eigenschaft ist dieser sehr dynamischen Sprache. Was ich nicht verstehe ist wieso JavaScript als einfache Sprache gehandelt wird. Ich finde die tools tragen auch einen wichtigen teil dazu bei. Und bei JavaScript habe ich immer leicht das Gefühl ohne navigation zu coden. Vielleicht kenne ich aber wie gesagt auch einfach nicht die richtigen werkzeuge die man verwenden muss. Microsoft stellt dafür ja ne Lösung bereit. Oder ist es anders Lösbar mit Tools. Obwohl typescript ja auch ej. Tool sein sollte oder? Vielleicht aber auch lieber emscripten. Ich halte JavaScript eher als problematische Sprache wenn es alleine um die Entwicklung geht.

Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von »TypeOverride« (22.04.2017, 13:50)


Werbeanzeige