Hola! como estan? Les dejo un pequeno resumen de lo aprendido!
Instance OF en js con instancias y protipos.
Convertiremos nuestras fabricas de objetos en prototipos y gracias a crear prototipos,utilizaremos el instance of para ver si ej nuestros learning paths realmente fueron creados con el prototipo learningpath, es decir, si realmete son instancias de este prototipo o en realidad son imitadores.
RECORDA que para crear prototipos, debemos usar la palabra this y new
Pondre como funciona el codigo completo y luego lo ire explicando de a poco.
function LearningPath({
name = requiredParam("name"),
courses = [],
}) {
this.name = name;
this.courses = courses;
}
function Student({
name = requiredParam("name"),
email = requiredParam("email"),
age,
twitter,
instagram,
facebook,
approvedCourses = [],
learningPaths = [],
} = {}) {
this.name = name;
this.name = name;
this.email = email;
this.age = age;
this.approvedCourses = approvedCourses;
this.socialMedia = {
twitter,
instagram,
facebook,
};
if (isArray(learningPaths)) {
this.learningPaths = [];
/* lo que hago con if (isArray(learningPaths)) {
this.learningPaths = []; es entenderm yo pido el argumento learningPaths, la pc lo almacena en el objeto que esta ahi arriba en student({}),luego de eso valido todos los datos ejempllo this.name = name; ahora me queda validar los learningPaths y le digo, che pibe, no me intersa lo que tenes adentro, te voy a validar que sos un array, uh si, sos un array, pero se que sos un array vavio, por lo tanto ire veindo con un bulce CADA UNA DE TOS PROPIEDADES, y las que cumplan ser instancia de LEARNING PATHS te lo metere con un push.*/
for (learningPathIndex in learningPaths) {
if (learningPaths[learningPathIndex] instanceof LearningPath) {
this.learningPaths.push(learningPaths[learningPathIndex]);
}
}
}
}
const escuelaWeb = new LearningPath({ name: "Escuela de js" });
const escuelaDataScience = new LearningPath({ name: "Escuela de data science" });
const juan = new Student({
email: "juanito@frijoles.co",
name: "Juanito",
learningPaths: [
escuelaWeb,
escuelaDataScience,
]
});
- Como funciona el
instanceof ⇒ Es importante saber que es un metodo que devolvera true o false.
function LearningPaths({
name,
courses = [],
}){
this.name = name;
this.courses = courses;
}
//el LearningPaths es mi prototipo
let desarrolloweb = new LearningPaths({
name: "desarrollo web",
courses: ["mates", "js", "guitarra"]
});
//desarrollo web es una instancia de LearningPaths, eso lo hago gracias al new.
let funValidate = (a,b) => {
let x = a instanceof b;
console.log(x)
}
funValidate(desarrolloweb, LearningPaths)
//esto de aca arriba es la funcion de validacion, en esta hice el instanceof, como se puede ver, estoy validando si desarrolloweb es una instancia de learninghPaths. la respuesta es un //true.
Empezamos con el codigo
//Aca simplemente declare 2 prototipos, el LearningPath, y Student.
function LearningPath({
name = requiredParam("name"),
courses = [],
}) {
this.name = name;
this.courses = courses;
}
function Student({
name = requiredParam("name"),
email = requiredParam("email"),
age,
twitter,
instagram,
facebook,
approvedCourses = [],
learningPaths = [],
} = {}) {
this.name = name;
this.name = name;
this.email = email;
this.age = age;
this.approvedCourses = approvedCourses;
this.socialMedia = {
twitter,
instagram,
facebook,
};
//Que sucede aca? Facil, la idea es que yo le pido toda la data al usuario de su ruta, y le pido en los argumentos de la funcion Student que me pase un parametro de lo que sera su learningPaths, yo solo SE LO PIDO, pero NO LO TRABAJO, como a los otros.
if (isArray(learningPaths)) {
this.learningPaths = [];
for (learningPathIndex in learningPaths) {
if (learningPaths[learningPathIndex] instanceof LearningPath) {
this.learningPaths.push(learningPaths[learningPathIndex]);
}
}
}
}
//Genial! ya el usuario nos debio pasar sus parametro learningpath,entonces esste codigo trbajare este parametro,si? bien lo primero que haremos con ese dato que no paso es decir con learningPaths, es verificar si es un array, es un array? si lo es, entra a lo que sucede dentro, y lo primero que se hace es el this.learningPaths = []; este afirmara que es un array, es neceario para guardar la data. luego de eso entramos a un bucle, un bucle bellisimo. Que hara este? facil, el con la variable learningPathIndex, agarrara cada dato de el array learningPaths, de esta manera => learningPaths[learningPathIndex]. por cada interracion esto learningPaths[learningPathIndex] cambiara, ya que solo es una variable del array. ahora por cada elemento, se vera si son instancias del LearningPath, que es nuestro prototipo. Por cada vez que ses verdadero, meteremos en el array learningPaths, esto learningPaths[learningPathIndex]. es decir, el elemento del array que respete tal condicion que hemos escrito.