Again, you don’t necessarily need the getter and setter and could directly access the property, but I don’t encourage this. These objects have a ton of properties, we merely use more than a few at the time: A property is like a variable which is bound to an object. No more verbose DOM manipulation to keep data and view in sync, just update the data and the view will follow. The browser creates and syncs these two behind the scenes for us. Again, we define our getter and setter methods, which are needed for each property we want to pass into the custom element. This method will run each time any of our observed attributes change and executes whatever logic you define inside. It consists of a x-controls component to hold the inputs, a x-counter component to show the output, and a x-container component to manage the application state and pass it down as properties to the other components. You don’t want to listen for many different events per component, making your code unreadable and complex.