Inicjalizacja metody

0

Witam
Mam taki kod, nic szczególnego działa i robi to co ma robić.
Próbowałem go przerobić żeby działał tak
xx.init().show() ale już mi się skończyły pomysły.
Niby do niczego to mi nie jest potrzebne ale lepiej znać różne sztuczki.
Prosiłbym o podpowiedź jak zastosować takie polecenie.

let test = function () {
    var xPromise;
    let init = () => {
        xPromise = loadData();
    };

    const show = async function () {
        const x = await xPromise;
        console.log(x);
    }
    return {
        show,
        init
    };

};
const xx = new test();
xx.init();
xx.show();
0

jezeli chcesz zrobic xx.init().show() to musisz w init zwrocic this

3

W Twoim oryginalnym kodzie w return tworzysz nowy obiekt, zamiast zwracać ten, na którym aktualnie pracujesz.

let test = function () {
    var xPromise;
    
    this.init = () => {
        xPromise = loadData();
        return this;
    };
 
    this.show = async function () {
        const x = await xPromise;
        console.log(x);
    }
};

Btw, skoro już korzystasz z JSowych nowinek, nie bój się też wykorzystywać słówko class ;-)

1

Tu masz przykład z użyciem this:

const test = function () {
  let xPromise
  
  const init = function () {
    xPromise = loadData()
    return this
  }
  
  const show = async function () {
    const x = await xPromise
    console.log(x)
  }
  
  return {
    init,
    show,
  }
}

CodePen: https://codepen.io/caderek/pen/XEmXmg?editors=0012

Przykład bez użycia this masz tu: https://codepen.io/caderek/pen/XEmmEK?editors=0012

0
Maciej Cąderek napisał(a):
const loadData = () => Promise.resolve('foo')
const test = function () {
  let xPromise
    const pub = {
    init() {
      xPromise = loadData()
      return pub
    },
     async show() {
      const x = await xPromise
      console.log(x)
    },
  }
  return pub
}
const xx = test()
xx.init().show()

Niby proste jak czytam ale chyba nigdy abstrakcyjnego myślenia nie ogarnę.
Dzięki za kod poprzedni z this tez jest ok ale staram się wszystko robić żeby this unikać.

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