💚 Like si te enamoraste de Object.defineProperty
con esta clase 👊
Introducción
¿Qué hay dentro de los objetos en JavaScript?
Profundicemos en los objetos
Static: atributos y métodos estáticos en JavaScript
Métodos estáticos del prototipo Object
Object.defineProperty
Cómo copiar objetos en JavaScript
Cómo funciona la memoria en JavaScript
Shallow copy en JavaScript
Qué es JSON.parse y JSON.stringify
Recursividad en JavaScript
Qué es recursividad
Deep copy con recursividad
Abstracción y encapsulamiento sin prototipos
Abstracción con objetos literales y deep copy
Factory pattern y RORO
Module pattern y namespaces: propiedades privadas en JavaScript
Getters y setters
Cómo identificar objetos
Qué es duck typing
Duck typing en JavaScript
Instance Of en JavaScript con instancias y prototipos
Atributos y métodos privados en prototipos
Creando métodos estáticos en JavaScript
Próximos pasos
¿Quieres más cursos de POO en JavaScript?
No tienes acceso a esta clase
¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera
Aportes 14
Preguntas 9
💚 Like si te enamoraste de Object.defineProperty
con esta clase 👊
Existe una manera de definir o modificar varias propiedades a la vez 👀. Con la función Object.defineProperties()
se puede pasar un objeto con las propiedades de cada key que quieren ser modificadas:
// Con defineProperty
Object.defineProperty(public, "readName", {
writable: false,
configurable: false,
});
Object.defineProperty(public, "changeName", {
writable: false,
configurable: false,
});
// Con defineProperties
Object.defineProperties(public, {
readName: {
configurable: false,
writable: false,
},
changeName: {
configurable: false,
writable: false,
},
});
Que buen maestro es Timothée Chalamet
Otro forma de lllamar lo que se esta realizando en esta clase es el uso de closures para retornar un contexto controlado y poder usar variables privadas en JS vanilla 😄
JavaScript no es un lenguaje fuertemente tipado, osea, que no tenemos que definir el tipo de nuestras variables. JavaScript entenderá que tipo de variable estamos usando.
En javascript no hay una palabra clave para definir una variable privada por lo que podemos crear una función que nos permita crear esta variable.
Por lo general, podemos usar el Object.defineProperty() para crear la variable publica o privada
Hola! como estan?
Bien, ese pequeno reto del profe para que el usaurio no pueda hacer juan name = “nicolas”, lo resolvi de esta manera:
newName(name) {
Object.defineProperty(juan, "name", {
value: name,
writable: false,
configurable: true,
enumerable: true,
})
},
changeName(newName) {
this.name = newName;
},
Todo era felicidad y entusiasmo hasta que llegué a estas últimas clases y cada vez me empecé a perder más 😥
Para el reto del profe deja una solución posible
function verify(nameVerify){
let blackList = ["puto","marica","verga","idiota"];
let verification = true;
for (ind in blackList){
if (nameVerify === blackList[ind]){
verification = false;
}
}
if (verification){
console.log("Cambio realizado con exito");
}
else {
console.log("El nombre de usuario no esta permitido");
}
};
Excelente explicación del profesor
actualmente podemos encapsular atributos y metodos privados en JS gracias al ES2022 simplemente agregando un # adelante del nombre de la variable o funcion y estas no entraran en conflicto con los metodos o atributos publicos, facilmente, podriamos tener declarados dos atributos con el mismo nombre y mas aun, una puede contener a la otra y no habra problema alguno, no se si me estoy adelantando pero solo me dio curiosidad jisjis, aqui la ref. 💚
function verify(newName){
const blackList = ["fuck","Bastard","Berk","Knob","Manky","Minger","Pillock"];
for(ind in blackList){
if(newName == blackList[ind]){
return false;
}else{
return true;
}
}
}
if(verify(newName)){
_private["_name"];
}else{
throw new Error(newName + " no es una palabra permitida >:(");
}
},
en este caso, object.freeze() no es posible usarlo debido al scope de las funciones
changeName(newName){
const nombre = newName.toLowerCase()
console.log(nombre)
for(i in malaPalabras){
if(nombre.includes(malaPalabras[i].toLowerCase())){
return console.log(`Esta palabra esta prohibida`)
}
}
this.firsName = newName
}
Los aportes, preguntas y respuestas son vitales para aprender en comunidad. Regístrate o inicia sesión para participar.