Wciąż jestem świeżym człowiekiem w Js. Ale próbowałem pracować z moim pierwszym większym projektem. Jednak po prostu nie mogę zrozumieć, dlaczego nie mogę uzyskać dostępu do członków konstruktora z funkcji, które są poza moją główną klasą. Zakładałem, że miałem coś wspólnego z module.exports / wymagać. Tak to zrobiłem. Nadal nie ma szczęścia.

Oto mój kod z main.js Plik:

const funcs = require('./funcs.js');

class MainClass {
    constructor(omegga, config, store) {
        this.omegga = omegga;
        this.config = config;
        this.store = store;
    }
 async init() { 

    TestVehicle.on('cmd:test', async name => {
        const dss = await this.store.get('cats'); // this works fine.
        funcs.setSomething('29'); // this errors
        console.log(dss);
    });
  }
}
module.exports = MainClass;

async stop() { }

Moje funkcje Funcs.Setomething ('29 ') Błędy. Oto funkcja z funcs.js :

var MainClass = require('./main.js');
const teampo = new MainClass();

async function setSomething(argument1) {
    try {
        teampo.store.set('cats', argument1); // this errors
    } catch(e) { console.error(e); }
}
module.exports = { setSomething };

Teraz JS mówi mi, że coś wydaje się niezdefiniowane. To jest komunikat o błędzie, który otrzymuję:

"TypeError: Nie można odczytać właściwości" Set "Undefined"

Zastanawiam się, dlaczego jest niezdefiniowany? Czy nie mogę odziedziczyć sklepu i wszystkich jego właściwości / metod? Próbowałem już wszystkiego, jak wymagać zmiany, modułu.exports itp. Ale nie działa. Czy przyczyna może być bardziej surowa, czy jest to jakiś prosty błąd, który robię i po prostu nadzorowałem cały czas?

0
Tetragrammaton 14 marzec 2021, 00:44

2 odpowiedzi

Najlepsza odpowiedź

Kiedy tworzysz instancję klasy tutaj: const teampo = new MainClass();, nie przekazujesz go 3 rzeczy, które wymaga

constructor(omegga, config, store) {}.

Ponieważ nie przekazałeś tego store, this.store, a tym samym teampo.store undefined

2
T J 13 marzec 2021, 21:51

Po utworzeniu klasy za pomocą const teampo = new MainClass(); nie przechodzisz żadnych argumentów. Konstruktor ustawia sklep do jednego z argumentów ({x1}}). Ponieważ nie ma argumentu sklepu, to nie jest niezdefiniowane.

Więc jeśli później spróbujesz zadzwonić set na nim błędów.

2
ray hatfield 13 marzec 2021, 21:51