Класс Source

Source на GitHub

Предназначен для создания объектов, которые будут источниками данных , логика этих объектов основана на переданной функции-колбэке

Полезно в случаях, когда нужно создать новый объект с уникальным поведением по генерации данных без создания для этого отдельного класса

Пример 1.

import {
    Source,
    give
} from 'patron-oop';

const timestamp = new Source((guest) => {
    give(Date.now(), guest);
});
timestamp.value((timestamp) => {
    console.log('timestamp is', timestamp);
});

Результат 1.

Result here

Источником данных может быть не только объект, но и функция вида (guest) => guest('value'). Напрямую можно обратиться к такому источнику через функцию value

Пример 2.

import {
  give,
  value
} from "patron-oop";

const helloSource = (guest) => {
  setTimeout(() => {
    give("Hello world", guest);
  }, 1000);
};

value(helloSource, (greeting) => {
  document.querySelector(
    ".guest-result-2"
  ).textContent = `greeting is "${greeting}"`;
});

Результат 2.

Result here

Или можно передать источник-функцию в виде зависимости объектам, которые ожидают интерфейс SourceType, в примере ниже используется комбинация SourceAll и источников-фукнций

Пример 3.

import {
  SourceAll,
  give,
  value
} from "patron-oop";

const all = new SourceAll();
value(give.bind(null, 1), all.guestKey("one"));
value(give.bind(null, 2), all.guestKey("two"));

all.value(({ one, two }) => {
  document.querySelector(".guest-result-3").textContent = `one + two = "${
    one + two
  }"`;
});

Результат 3.

Result here

Интересный факт, что с помощью частичного применения(bind) можно превратить функцию give в источник данных, передав только первый аргумент

Смотрите также

give value