Botón para abrir el Menú Botón para cerrar el Menú
Logo da empresa Alura
Iniciar Sesión Nuestros Planes
Formaciones Conoce a Luri
  • Programación _
  • Front End _
  • Data Science _
  • DevOps _
  • Innovación y Gestión _
Artículos de Tecnología > Front-end

Herencia en JavaScript

alexandre-aquiles
alexandre-aquiles
05/04/2022

Compartir

herencia de javascript

Tenemos un constructor Cuenta que establece un atributo saldo y un método deposita:

   function Cuenta() { 
   this.balance = 0; 
    this.deposita = function(valor) { 
        this.balance += valor 
        };
}
var cuentaCorriente = new Cuenta();
cuentaCorriente.deposita(1000); 
cuentaCorriente.balance; //1000

¡Genial, funciona!

Ahora, nuestro cliente necesita una cuenta de ahorros: un tipo de cuenta que actualiza el saldo según un índice.

Es muy fácil de hacer: sólo hay que crear un constructor CuentaAhorros, copiar y pegar todo el código de Cuenta y definir un nuevo método actualiza:

function CuentaAhorros() { 
    //copia de la cuenta 
    this.balance = 0; this.deposita = function(valor) { this.balance += valor; };
    //método adicional... 
    this.actualiza = function(índice) { this.balance += this.balance * índice; }; }
var cuentaAhorros = new cuentaAhorros();
 cuentaAhorros.deposita(1000); 
 cuentaAhorros.balance; //1000 
 cuentaAhorros.actualiza(0.05); 
 cuentaAhorros.balance; //1050

Bueno, pero copiar y pegar es malo. Cada vez que cambiamos o ampliamos Cuenta, tenemos que acordarnos de copiarla en CuentaAhorros.

Lo ideal sería reutilizar el código de Cuenta, haciendo de CuentaAhorros un tipo especial de Cuenta, con todo lo que tiene Cuenta más el método actualiza.

En los lenguajes orientados a objetos, esta idea de crear un tipo especial basado en otro se llama Herencia. El JavaScript es un linguaje orientado a objetos y tiene soporte de herencia.

La mayoría de los lenguajes tienen clases, con alguna forma de extenderlas. Pero JavaScript no es un lenguaje "clásico" y la herencia en JavaScript es un poco diferente, basada en prototipos.

Primero, creo el constructor de CuentaAhorro sin las propiedades que quiero heredar, sólo con el método extra:

function CuentaAhorros() { 
    //no necesito copiar de Cuenta...
     this.actualiza = function(índice) { 
         this.balance += this.balance * índice
        };
    }

Entonces, utilizando el prototype de CuentaAhorros, digo que quiero copiar todo lo que hay en Cuenta en CuentaAhorros.

CuentaAhorros.prototype = new Cuenta();
CuentaAhorros.prototype.constructor = CuentaAhorros;

De hecho hay otras formas de copiar las propiedades de Cuenta en el prototype de CuentaAhorros. La forma anterior es la más común.

Por último, podemos crear una cuenta de ahorros y utilizar todo lo de una cuenta, más la actualización:

var cuentaAhorros = new CuentaAhorro();
cuentaAhorros.deposita(1000); 
cuentaAhorros.actualiza(0.05); 
cuentaAhorros.balance; //1050

En la última versión de JavaScript, EcmaScript 2018, se puede definir la herencia mediante la palabra clave extends, presente en muchos otros lenguajes:

class Cuenta { constructor() { 
    this.balance = 0; } 
    deposita(valor) { this.balance += valor; } 
class CuentaAhorros extends Cuenta { 
    actualiza(índice) { this.balance += this.balance * índice; }

El lenguaje Javascript tiene una gran cantidad de funciones potentes! Formación Front-end de Alura Latam.

Este articulo fue adecuado para Alura Latam por: Marianna Costa

Artículo Anterior
¿Qué es DOM?
Siguiente Artículo
CodePen ¿Que és y cómo funciona?

Ver otros artículos sobre Front-end

Navegación

  • Planes
  • Instructores
  • Blog
  • Política de privacidad
  • Términos de uso
  • Sobre nosotros
  • Preguntas frecuentes

¡CONTÁCTANOS!

  • ¡Quiero entrar en contacto!

Blog

  • Programación
  • Data Science
  • Front End
  • Innovación y Gestión
  • DevOps

AOVS Sistemas de Informática S.A CNPJ 05.555.382/0001-33

SÍGUENOS EN NUESTRAS REDES SOCIALES

YouTube Facebook Instagram Linkedin Whatsapp Spotify

NOVEDADES Y LANZAMIENTOS

Aliados

  • Programa de aceleração Scale-Up Endeavor
  • En Alura somos unas de las Scale-Ups seleccionadas por Endeavor, programa de aceleración de las empresas que más crecen en el país.
  • Growth Academy 2021 do Google For Startups
  • Fuimos unas de las 7 startups seleccionadas por Google For Startups en participar del programa Growth Academy en 2021
Alura

Powered by

Caelum

AOVS Sistemas de Informática S.A CNPJ 05.555.382/0001-33

SÍGUENOS EN NUESTRAS REDES SOCIALES

YouTube Facebook Instagram Linkedin Whatsapp Spotify

Cursos

Cursos de Programación
Lógica de Programación | Java
Cursos de Front End
HTML y CSS | JavaScript | React
Cursos de Data Science
Data Science | Machine Learning | Excel | Base de Datos | Data Visualization | Estadística
Cursos de DevOps
Docker | Linux
Cursos de Innovación y Gestión
Transformación Ágil | Marketing Analytics

Alura

  • Educação em Tecnologia

    • logo fiap FIAP
    • logo casa do codigo Casa do Código
    • logo pm3 PM3 - Cursos de Produto
  • Mais Alura

    • logo alura start START BY Alura
    • logo alura lingua Alura Língua
    • logo alura para empresas Alura Para Empresas
    • logo alura latam Alura LATAM
  • Comunidade

    • logo tech guide Tech Guide
    • logo 7 days of code 7 days of code
    • logo Hipsters ponto Jobs Hipsters ponto Jobs
  • Podcasts

    • logo Hipster Network Hipster Network
    • logo Hipsters ponto Tech Hipsters ponto Tech
    • logo Dev sem fronteiras Dev sem Fronteiras
    • logo Like a Boss Like a Boss
    • logo IA Sob Controle IA Sob Controle
    • logo Mesa de Produto Mesa de Produto
    • logo Decode Decode
    • logo FIAPCast FIAPCast