Created
October 19, 2020 04:51
-
-
Save doriansmiley/f4179517a8fad34bfca8212532ba592d to your computer and use it in GitHub Desktop.
Builder Patter in Action
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| /* | |
| * Below is an example of using a builder pattern to distill a declerative function to add/remove event listeners | |
| */ | |
| function callback (event) { | |
| console.log(event); | |
| } | |
| function addEventListeners1 () { | |
| this.element.addEventListener('click', callback); | |
| } | |
| function removeEventListeners1 () { | |
| this.element.removeEventListeners('click', callback); | |
| } | |
| function addRemoveEventListeners1 (add = true) { | |
| const action = add ? 'addEventListener' : 'removeEventListeners'; | |
| this.element[action]('click', callback); | |
| } | |
| function addRemoveEventListeners2 (listeners = [ | |
| { | |
| target: element, | |
| callback: callback, | |
| event: 'click', | |
| add: true | |
| } | |
| ]) { | |
| listeners.forEach((listener) => { | |
| const action = listener.add ? 'addEventListener' : 'removeEventListeners'; | |
| listener.target[action](listener.event, listener.callback); | |
| }); | |
| } | |
| function addEventListeners1 (listeners = [ | |
| { | |
| target: element, | |
| callback: callback, | |
| event: 'click', | |
| } | |
| ]) { | |
| const removeFunctions = []; | |
| listeners.forEach((listener) => { | |
| listener.target.addEventListener(listener.event, listener.callback); | |
| removeFunctions.push({ | |
| target: element, | |
| callback: callback, | |
| event: 'click', | |
| remove: () => { | |
| listener.target.removeEventListeners(listener.event, listener.callback); | |
| } | |
| }); | |
| }); | |
| return removeFunctions; | |
| } | |
| function addEventListeners (listeners = [ | |
| { | |
| target: element, | |
| callback: callback, | |
| event: 'click', | |
| } | |
| ]) { | |
| const removeFunctions = []; | |
| listeners.forEach((listener) => { | |
| listener.target.addEventListener(listener.event, listener.callback); | |
| removeFunctions.push({ | |
| target: element, | |
| callback: callback, | |
| event: 'click', | |
| remove: () => { | |
| listener.target.removeEventListeners(listener.event, listener.callback); | |
| } | |
| }); | |
| }); | |
| return { | |
| remove: () => { | |
| removeFunctions.forEach((listener) => { | |
| listener.remove(); | |
| }); | |
| }, | |
| listeners: removeFunctions | |
| }; | |
| } | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment