Announcement

Collapse
No announcement yet.

Wieso wird auf "name" ohne den Unterstrich zugegriffen?

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Wieso wird auf "name" ohne den Unterstrich zugegriffen?

    Hallo!
    Man betrachte folgenden Code:
    Code:
    const item = {
        _name: 'Schrödinger programmiert Java',
        _price: 44.90,
        _author: 'Philip Ackermann',
        _isbn: '978-3-8362-7272-8',
        set name(newName) {
            if(typeof newName === 'string') {
                console.log('Neuen Namen setzen');
                this._name = newName;
            } else {
                throw new TypeError('Name muss eine Zeichenkette sein.')
            }
        },
        get name() {
            console.log('Namen zurückgeben');
            return this._name;
        }
    }
    console.log(item.name);
    item.name = 'Schrödinger programmiert Java - das etwas andere Fachbuch';
    Wieso wird auf die Eigenschaft "name" ohne den Unterstrich zugegriffen? Eine Eigenschaft "name" ist doch gar nicht definiert. Nur "_name".
    Grüße, getOwnPropertyDescriptor

    Update: Okay, die Getter-Funktion "name" ist es. Aber wieso lautet dann die zweite Ausgabe des Skripts "Schrödinger programmiert Java"? Es gibt keinen Befehl
    Code:
    console.log(item._name)

  • #2
    Welche 2. Ausgabe?
    1. Ausgabe = console.log('Namen zurückgeben');
    2. Ausgabe = console.log(item.name); -> Getter
    Christian

    Comment


    • #3
      Danke, hab's soweit geblickt. Frage: Wie kann ich den Zugriff auf Eigenschaften nur über Setter- und Getter-Methoden erlauben?
      Grüße!

      Comment


      • #4
        In dem man eine Klasse entwirft und den einzelnen Variablen ein # voranstellt

        Code:
        class MyClass {
        
          a = 1;          // .a is public
          #b = 2;         // .#b is private
          static #c = 3;  // .#c is private and static
        
          incB() {
            this.#b++;
          }
        
        }
        
        let m = new MyClass();
        
        m.incB(); // runs OK
        m.#b = 0; // error - private property cannot be modified outside class
        https://www.sitepoint.com/javascript...-class-fields/
        Christian

        Comment

        Working...
        X