Kilka małych wskazówek:
let target = targets.slice(1, targets.length);
daje taki sam efekt jak:
let target = targets.slice(1);
drugi parametr domyślnie jest ustawiany na targets.length.
--------------------------------------------------------------------------------
window.addDelegation = (parents, targets, type, listener)
gdy tworzysz metodę przyjmującą więcej niż 2-3 argumenty to polecam stosowanie wzorca obiektu w roli argumentów funkcji, czyli:
window.addDelegation = (obj) => {
obj.parents;
obj.targets;
obj.listener;
obj.type;
}
W tym rozwiązaniu wywołując metodę addDelegation nie musisz znać kolejności argumentów i po prostu przekazujesz do funkcji obiekt obj, z właściwościami parents, targets ... Musisz znać wtedy te nazwy właściwości, ale z dwojga złego uważam, że jest to lepsze niż zapamiętywanie kolejności argumentów.
--------------------------------------------------------------------------------
for(let parent of queryAll(parents)){ //line 48
parent.addEventListener(type, check, event); //line 49
} //line 50
Czy aby na pewno trzeci parametr to "event"?