const proxies = new WeakMap; const hyphen = name => name.replace(/([a-z])([A-Z])/g, '$1-$2'); const handler = { get: (el, name) => el.getAttribute(hyphen(name)), set: (el, name, value) => { el.setAttribute(hyphen(name), value); return true; } }; const set = el => { const proxy = new Proxy(el, handler); proxies.set(el, proxy); return proxy; }; const attr = el => proxies.get(el) || set(el); attr(document.body).itemprop = 1; attr(document.body).ariaDescribedby = 'id'; document.body.outerHTML; /* */