Chcę wywołać funkcję narzędzia z kontekstem klasy, aby utworzyć instancję obiektu z importowanego (wewnątrz klasy wywołującej):

import { setSharedInstances } = require("./utilities");
import TestService = require("./TestService");

class Test {
   constructor() {
      this.services = {};
   }

   getServices() {
       setSharedInstances.call(this, TestService);
   }
}

Moja funkcja narzędzi wygląda tak:

module.exports = {
   setSharedInstances: (...ServiceClasses) =>
      ServiceClasses.map(ServiceClass =>
         !this.services[ServiceClass.name] && (this.services[ServiceClass.name] = new ServiceClass()))
};

Mój wyeksportowany TestService wygląda tak:

class TestService {
   constructor() {
      this.gotInstantiated = true;
   }
}

Ale kiedy wykonam ten kod

const test = new Test();
test.getServices();
console.log(test.services.TestService.gotInstanciated); //expected to be true

Otrzymuję ten błąd:

TypeError: Cannot read property 'Test' of undefined in utilities

Rozumiem, że z .call, setSharedInstances będzie działać na zmiennych usług zadeklarowanych w konstruktorze klasy Test. Czy ktoś może mi powiedzieć, czego tu brakuje?

1
cartman 1 grudzień 2018, 20:41

1 odpowiedź

Najlepsza odpowiedź

Funkcje strzałek przechwytują this. W swoich narzędziach, jeśli zamierzasz odroczyć rozdzielczość this, aby poczekać na wywołanie funkcji, przełącz górną na klasyczny function.

setSharedInstances: function (...ServiceClasses) {
    ...
}
2
SpencerPark 1 grudzień 2018, 20:54