22/11/24
Prototipos en JavaScript
Los prototipos en JavaScript son un mecanismo fundamental para crear objetos que heredan
propiedades y métodos de otros objetos. En este sentido, JavaScript es un lenguaje basado en
prototipos, lo que significa que los objetos pueden tener un objeto prototipo, que actúa como una
plantilla para heredar características.
Cadena de prototipos
La cadena de prototipos (prototype chain) es la secuencia de objetos prototipos que se buscan cuando
se accede a una propiedad o método en un objeto. La búsqueda comienza en el objeto actual y se sigue
hasta el objeto [Link], que es el prototipo final en la cadena.
Creación de prototipos
Para crear un prototipo en JavaScript, se utiliza una función constructora (constructor function). La
función constructora define el prototipo para los objetos que se crean a partir de ella. El prototipo se
define mediante la propiedad prototype de la función constructora.
Ejemplo
Supongamos que queremos crear un objeto Coche con propiedades marca y modelo, y un
método arrancar. Podríamos definir la función constructora Coche de la siguiente manera:
function Coche(marca, modelo) {
[Link] = marca;
[Link] = modelo;
}
[Link] = function() {
[Link]("El coche está arrancando...");
};
Luego, podemos crear un objeto miCoche a partir de la función constructora Coche y llamar al
método arrancar:
const miCoche = new Coche("Toyota", "Camry");
[Link](); // Imprime: El coche está arrancando...
Más de Prototipos:
Como nota inicial, la POO de JavaScript se encuentra basada en prototipos y no en clases. Para
ver más información sobre prototype-based OOP vrs. class-based OOP puedes visitar el
siguiente link(en inglés).
Los prototipos son un conjunto de normas para integrar Programación Orientada a
Objetos en JavaScript .
Ejemplos:
herencia:
function Square(side){
[Link] = [Link]([Link]);
[Link](this, side, side);
[Link] = function(){
return [Link] * [Link];
}
}
Clase:
class Polygon {
constructor(height, width) {
[Link] = height;
[Link] = width;
}
}
Heredar de clase base:
class Square extends Polygon {
constructor(side) {
super(side, side);
}
getArea() {
return [Link] * [Link];
}
}
y con esto podemos crear una instancia:
var square = new Square(5);
// debe imprimir 25
[Link]([Link]());