Uczyłem się JavaScript i próbowałem używać MVC. Zauważyłem problem i nigdzie nie mogłem znaleźć odpowiedzi dlaczego. Problem jest następujący:

Mam model klasy następujący w model.js:

export default class Model {
    constructor() {}

    speak(word) {
        return word;
    }
}

I kontroler (controller.js):

import Model from './model.js';

export default class Controller {
    constructor() {
        this.model = new Model();
    }

    speak(word) {
        this.model.speak(word);
    }
}

Piszę tutaj tylko eksport i import, ponieważ mam to w mojej aplikacji i chcę, aby ten przykładowy kod jak najlepiej naśladował mój problem. Mam oddzielne pliki dla każdej klasy lub komponentu. W każdym razie później, w moim głównym kontrolerze aplikacji, mam

import Controller from './controller.js';

const controller = new Controller();
console.log(controller.speak('Hi'));

Ostatnia linia zawsze zwraca undefined, bez względu na to, co zwracam, niezależnie od tego, czy jest to, jak w tym przypadku, prosty ciąg, czy jakikolwiek atrybut klasy modelu. Wiem, kiedy to robię:

controller.model.speak('Hi');

Wtedy wszystko jest w porządku. Moje pytanie nie brzmi zatem, jak to rozwiązać, ale dlaczego tak się dzieje? Bardzo dziękuję za odpowiedzi.

2
jjakkubb 2 kwiecień 2020, 14:47

3 odpowiedzi

Najlepsza odpowiedź

Musisz sprawić, by Controller.speak zwróciło wartość.

speak(word) {
    return this.model.speak(word);
}
3
snak 2 kwiecień 2020, 11:50

controller.model.speak('Hi') zamiast tego, jeśli napiszesz console.log(controller.model.speak('Hi'));, zobaczysz, że Hi.

0
Mujibur Rehman Ansari 2 kwiecień 2020, 11:56

Nie zwróciłeś wyniku z funkcji speak () kontrolera.

1
David Innocent 2 kwiecień 2020, 11:54