Предназначен для создания объектов, которые будут , логика этих объектов основана на переданной функции-колбэке
Полезно в случаях, когда нужно создать новый объект с уникальным поведением по генерации данных без создания для этого отдельного класса
Пример 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.
Источником данных может быть не только объект, но и функция вида
(guest) => guest('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.
Или можно передать источник-функцию в виде зависимости объектам, которые
ожидают интерфейс SourceType, в примере ниже используется комбинация
Пример 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.
Интересный факт, что с помощью частичного применения(bind) можно превратить функцию give в источник данных, передав только первый аргумент