Uruchamianie metody z poziomu innej metody a słowo this

0

Cześć, mam problem z poniższym kodem:


function x () {
  console.log('Tekst');
}

class MojaKlasa {
    constructor (parametr) {
        this.parametr = parametr;
    }

    funkcja () {
        this.parametr();
    }

    start () {
        setInterval(this.funkcja,100);
    }
}

var app = new MojaKlasa (x);
app.start();

po wykonaniu wewnątrz "funkcja" otrzymuję błąd

Uncaught TypeError: this.parametr is not a function at funkcja

Jak powinienem poprawić swój kod?
Pozdrawiam.

1

problem jest tutaj

  setInterval(this.funkcja,100);

podając this.funkcja do setInterval tracisz wiązanie z this. Funkcja setInterval dostaje samą funkcję bez obiektu. To się w JS uruchamia w podobny sposób jakbyś zapisał:

var funkcja =  this.funkcja;
setInterval(funkcja,100);

czyli jak się wywołuje funkcja to już this będzie co innego (możesz to sprawdzić dodając console.log(this) w funkcji funkcja).

Żeby utrzymać this możesz użyć np. metody bind:

  setInterval(this.funkcja.bind(this),100);
1

W setInteval funkcja jest wywoływana w innym kontekście i this nie odnosi się już do instancji Twojej klasy. Możesz użyć zbindowanej funkcji lub np. arrow function, ale gdy Twoim celem jest jedynie zbindowanie contextu, to bind będzie lepszym wyjściem.

0

Nie wiem czemu this.parametr wywołujesz jako funkcję.

1 użytkowników online, w tym zalogowanych: 0, gości: 1