JavaScript attribute accessors (getter and setter) that emit events on change and read