Agreguemos una pequeña validación para garantizar que al menos la asignación a name sea de al menos una letra y no sea un string vacío.
functionisObject(subject){returntypeof subject =="object";}functionisArray(subject){returnArray.isArray(subject);}functionrequiredParam(param){thrownewError(param +" es obligatorio");}functioncreateStudent({ name =requiredParam("name"), email =requiredParam("email"), age, twitter, instagram, facebook, approvedCourses =[], learningPaths =[],}={}){const privateAtributos ={"_name": name,};const publicAtributos ={ email, age, approvedCourses, learningPaths,socialMedia:{ twitter, instagram, facebook,},getname(){return privateAtributos["_name"];},setname(newName){if(newName.length!=0){// 👈👈 privateAtributos["_name"]= newName;}else{console.warn("Tu nombre debe tener al menos 1 caracter");}},};return publicAtributos;}
¡Listo! Ya podemos crear objetos y utilizar los getters y setters respectivos del atributo name:
const juan =createStudent({email:"juanito@frijoles.co",name:"Juanito"});console.log(juan.name);// Se ejecuta el GETTERjuan.name="Rigoberto";// Se ejecuta el SETTERconsole.log(juan.name);
Apliquemos Object.getOwnPropertyDescriptors sobre nuestro objeto juan para visualizar la accesibilidad de sus atributos: el atributo name no tendrá las propiedades value y wriable como tal, en vez de eso nos aparecerán las funciones get y set. Observemos esto en la consola del navegador:
Object.getOwnPropertyDescriptors(juan);
Vamos a aprender ahora a identificar objetos. Primero, conozcamos acerca del Duck Typing. 🤔👨💻