'Access Javascript class fields in class methods

Opposed to my expectation I can't access my class field myLibrary in the class method initialize().

class ViewController {
      myLibrary = new Library();
      initialize() {
        console.log(myLibrary); // undefined

The only "solution" I found was to declare myLibrary outside of the class as a global variable. Is there a way to declare fields in a class and then, well, use them?



Solution 1:[1]

JavaScript classes do not work the same way as Java classes.

To access properties on an object you need to state the object and then access a property on it. They aren't treated as variables in the current scope.

Inside a method, the keyword this will give you the associated object. (See How does the "this" keyword work? for a less simplified explanation).

So you need this.myLibrary instead of just myLibrary.

Solution 2:[2]

class Library {
  …
}

class ViewController {
  constructor() {
    this.myLibrary = new Library();
  }

  log() {
    console.log(this.myLibrary);
  }
}

const viewController = new ViewController();
viewController.log()

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1
Solution 2 marcobiedermann