Estoy declarando mi objeto enumerable así:
let inputAttributes = {"type": "text", "minlength": "3", "max": "30", "class": "form-control"};y luego asignándolo así:
Object.assign(textfieldTitle, inputAttributes);sin embargo, cuando entro en el inspector en Google Chrome, mi entrada se ve así:
<input name="metafield[key 0]" type="text" max="30"> ¿Cómo es que solo se asignan los atributos max='30' y type='text' ?
HTMLInputElement no tiene una propiedad de class o minlength . Las propiedades reflejadas para esos atributos son className (heredada de Element ) y minLength (tenga en cuenta la L mayúscula). Entonces, tendría que usar esos nombres en su objeto original o escribir su propia función de asignación que traduzca los nombres. (O escriba su propia función de asignación que use setAttribute en su lugar, pero yo no haría eso).
En un comentario has dicho:
...es bueno recordar que los atributos asignados por JS no son letra por letra lo que ves en el HTML
Lo son si establece atributos , a través de setAttribute . Por ejemplo:
theElement.setAttribute("class", "new value");Eso funciona correctamente (en todas las versiones excepto en las obsoletas del obsoleto Internet Explorer).
Lo que está viendo es que la propiedad que refleja un atributo no siempre tiene exactamente el mismo nombre que el atributo. ( className [ class ] y htmlFor [ for ] son los ejemplos clásicos). Esto se debe a que en JavaScript anterior a ES5, no podía usar class o for u otras palabras reservadas como nombres de propiedades literales ( obj.class = "x" ) , aunque la versión que usaba la notación entre paréntesis era ( obj["class"] = "x" ). Entonces, las propiedades reflejadas para class y for se crearon className y htmlFor (hay una tercera al menos en uno de los subtipos de elementos; no me llega de inmediato).