Skip to content

Commit ed349d9

Browse files
committed
Clase 3 Intermedio | 12/02/2025
Objetos y Clases avanzadas
1 parent 6695f12 commit ed349d9

4 files changed

Lines changed: 285 additions & 2 deletions

File tree

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
/*
2+
Clase 3 - Objetos y Clases avanzadas (12/02/2025)
3+
Vídeo: https://www.twitch.tv/videos/2379412787?t=00h21m33s
4+
*/
5+
6+
// Objetos avanzados
7+
8+
// - Prototipos y Herencia
9+
10+
// Prototipos
11+
12+
let person = {
13+
name: "Brais",
14+
age: 37,
15+
greet() {
16+
console.log(`Hola, soy ${this.name}`)
17+
}
18+
}
19+
20+
console.log(person.__proto__)
21+
console.log(Object.getPrototypeOf(person))
22+
23+
person.sayAge = function () {
24+
console.log(`Tengo ${this.age} años`)
25+
}
26+
27+
console.log(person)
28+
person.sayAge()
29+
30+
// Herencia
31+
32+
let programmer = Object.create(person)
33+
programmer.language = "JavaScript"
34+
35+
programmer.name = "MoureDev"
36+
console.log(person.name)
37+
console.log(person.language)
38+
39+
console.log(programmer.name)
40+
console.log(programmer.age)
41+
console.log(programmer.language)
42+
programmer.greet()
43+
programmer.sayAge()
44+
45+
// - Métodos estáticos y de instancia
46+
47+
function Person(name, age) {
48+
this.name = name
49+
this.age = age
50+
}
51+
52+
Person.prototype.greet = function () {
53+
console.log(`Hola, soy ${this.name}`)
54+
}
55+
56+
let newPerson = new Person("Brais", 37)
57+
newPerson.greet()
58+
59+
// - Métodos avanzados
60+
61+
// assign
62+
63+
let personCore = { name: "Brais" }
64+
let personDetails = { age: 37, alias: "MoureDev" }
65+
66+
let fullPerson = Object.assign(personCore, personDetails)
67+
console.log(fullPerson)
68+
69+
// keys, values, entries
70+
71+
console.log(Object.keys(fullPerson))
72+
console.log(Object.values(fullPerson))
73+
console.log(Object.entries(fullPerson))
Lines changed: 180 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,180 @@
1+
/*
2+
Clase 3 - Objetos y Clases avanzadas (12/02/2025)
3+
Vídeo: https://www.twitch.tv/videos/2379412787?t=00h21m33s
4+
*/
5+
6+
// Clases avanzadas
7+
8+
class Person {
9+
constructor(name, age) {
10+
this.name = name
11+
this.age = age
12+
}
13+
14+
greet() {
15+
console.log(`Hola, soy ${this.name}`)
16+
}
17+
}
18+
19+
const person = new Person("Brais", 37)
20+
person.greet()
21+
22+
person.sayAge = function () {
23+
console.log(`Tengo ${this.age} años`)
24+
}
25+
person.sayAge()
26+
27+
// - Abstracción
28+
29+
class Animal {
30+
constructor(name) {
31+
if (new.target === Animal) {
32+
throw new Error("No se puede instanciar una clase abstracta")
33+
}
34+
this.name = name
35+
}
36+
37+
makeSound() {
38+
throw new Error("Este método tiene que ser implementado por la subclase")
39+
}
40+
}
41+
42+
// Error
43+
// const animal = new Animal("Mou")
44+
// console.log(animal)
45+
46+
// - Polimorfismo
47+
48+
class Cat extends Animal {
49+
50+
makeSound() {
51+
console.log("Miau!")
52+
}
53+
}
54+
55+
class Dog extends Animal {
56+
57+
makeSound() {
58+
console.log("Guau!")
59+
}
60+
}
61+
62+
const cat = new Cat("MoureCat")
63+
console.log(cat)
64+
cat.makeSound()
65+
66+
const dog = new Dog("MoureDog")
67+
console.log(dog)
68+
dog.makeSound()
69+
70+
// - Mixins
71+
72+
const FlyMixin = {
73+
fly() {
74+
console.log(`${this.name} está volando`)
75+
}
76+
}
77+
78+
class Bird extends Animal { }
79+
80+
class Dragon extends Animal { }
81+
82+
Object.assign(Bird.prototype, FlyMixin)
83+
Object.assign(Dragon.prototype, FlyMixin)
84+
85+
const bird = new Bird("MoureBird")
86+
87+
console.log(bird.name)
88+
bird.fly()
89+
90+
const dragon = new Dragon("MoureDragon")
91+
92+
console.log(dragon.name)
93+
dragon.fly()
94+
95+
// - Patrón Singleton
96+
97+
class Session {
98+
99+
constructor(name) {
100+
if (Session.instance) {
101+
return Session.instance
102+
}
103+
this.name = name
104+
Session.instance = this
105+
}
106+
}
107+
108+
const session1 = new Session("Brais Moure")
109+
const session2 = new Session()
110+
console.log(session1.name)
111+
console.log(session2.name)
112+
console.log(session1 === session2)
113+
114+
const session3 = new Session("MoureDev")
115+
console.log(session3.name)
116+
console.log(session2 === session3)
117+
118+
// - Symbol
119+
120+
const ID = Symbol("id")
121+
122+
class User {
123+
constructor(name) {
124+
this.name = name
125+
this[ID] = Math.random()
126+
}
127+
128+
getId() {
129+
return this[ID]
130+
}
131+
}
132+
133+
const user = new User("Brais")
134+
console.log(user.name)
135+
console.log(user.ID)
136+
console.log(user.getId())
137+
138+
// - instanceof
139+
140+
class Car { }
141+
142+
const car = new Car()
143+
144+
console.log(car instanceof Car)
145+
146+
// - create
147+
148+
const anotherCar = Object.create(Car.prototype)
149+
150+
console.log(anotherCar instanceof Car)
151+
152+
// - Proxy
153+
154+
const proxy = {
155+
get(target, property) {
156+
console.log(`Se accede a la propiedad ${property}`)
157+
return target[property]
158+
},
159+
set(target, property, value) {
160+
if (property === "balance" && value < 0) {
161+
throw new Error("El saldo no puede ser negativo")
162+
}
163+
target[property] = value
164+
}
165+
}
166+
167+
class BankAccount {
168+
constructor(balance) {
169+
this.balance = balance
170+
}
171+
}
172+
173+
const account = new Proxy(new BankAccount(100), proxy)
174+
console.log(account.balance)
175+
176+
account.balance = 50
177+
console.log(account.balance)
178+
179+
// Error
180+
// account.balance = -10
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
/*
2+
Clase 3 - Objetos y Clases avanzadas (12/02/2025)
3+
Vídeo: https://www.twitch.tv/videos/2379412787?t=00h21m33s
4+
*/
5+
6+
// 1. Agregega una función al prototipo de un objeto
7+
8+
// 2. Crea un objeto que herede de otro
9+
10+
// 3. Define un método de instancia en un objeto
11+
12+
// 4. Haz uso de get y set en un objeto
13+
14+
// 5. Utiliza la operación assign en un objeto
15+
16+
// 6. Crea una clase abstracta
17+
18+
// 7. Utiliza polimorfismo en dos clases diferentes
19+
20+
// 8. Implementa un Mixin
21+
22+
// 9. Crea un Singleton
23+
24+
// 10. Desarrolla un Proxy

README.md

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@
1515

1616
### Curso de fundamentos intermedio (continuación del desde cero). Nueva clase cada semana.
1717

18-
#### 🔴 PRÓXIMA CLASE EN DIRECTO: Miércoles 12 de febreto a las 20:00h (España) en [Twitch](https://twitch.tv/mouredev) y [YouTube](https://youtube.com/@mouredev)
19-
#### 🗓️ CONSULTA EL HORARIO POR PAÍS Y CREA UN RECORDATORIO desde [Discord](https://discord.gg/876GQ39x?event=1336827032805576714)
18+
#### 🔴 PRÓXIMA CLASE EN DIRECTO: Miércoles 19 de febrero a las 20:00h (España) en [Twitch](https://twitch.tv/mouredev) y [YouTube](https://youtube.com/@mouredev)
19+
#### 🗓️ CONSULTA EL HORARIO POR PAÍS Y CREA UN RECORDATORIO desde [Discord](https://discord.gg/umXned72?event=1339346133624946889)
2020

2121
* Clase 1 [29/01/2025] - Funciones avanzadas
2222
* [Vídeo](https://www.twitch.tv/videos/2367024319?t=00h08m45s)
@@ -28,6 +28,12 @@
2828
* [Código](./Intermediate/02-advanced-structures.js)
2929
* [Ejericios](./Intermediate/03-advanced-structures-exercises.js)
3030

31+
* Clase 3 [12/02/2025] - Objetos y Clases avanzadas
32+
* [Vídeo](https://www.twitch.tv/videos/2379412787?t=00h21m33s)
33+
* [Código Objetos](./Intermediate/04-advanced-objects.js)
34+
* [Código Clases](./Intermediate/05-advanced-classes.js)
35+
* [Ejericios](./Intermediate/06-advanced-objects-classes-exercises)
36+
3137
## Clases en vídeo
3238

3339
### Curso de fundamentos desde cero

0 commit comments

Comments
 (0)