Fictizia / Curso-JS-para-desarrolladores-web_ed5

FICTIZIA » Curso de JavaScript para desarrolladores web — 5ª Edición
4 stars 11 forks source link

POO #4

Closed Stelair closed 8 years ago

Stelair commented 8 years ago

En la POO de JavaScript no están presentes el concepto clase y en su lugar se utiliza el concepto de prototipos para simular el comportamiento de una clase?

UlisesGascon commented 8 years ago

Hola @Stelair! Muy buena pregunta.

Aún no hemos visto nada de POO en clase, pero podemos hacer un hueco mañana para ver las bases de POO en JS si quieres.

MDN lo define muy bien:

La programación basada en prototipos es un estilo de programación orientada a objetos en la que las clases no están presentes y la reutilización de comportamiento (conocido como herencia en lenguajes basados en clases) se lleva a cabo a través de un proceso de decoración de objetos existentes que sirven de prototipos. Este modelo también se conoce como programación sin clases, orientada a prototipos o basada en ejemplos.

Las claves para manejarnos con este paradigma en JS está en los constructores (funciones).

    var coche = function (marca, modelo, antiguedad, color, tipo) {
        this.marca = marca;
        this.modelo = modelo;
        this.antiguedad = antiguedad;
        this.color = color;
        this.tipo = tipo;
        this.detalles = function(){
          console.log("Tu coche es un "+this.marca+" "+this.modelo+" con "+this.antiguedad+" años, clase "+this.tipo+" y color "+this.color);
        }
    };

    var miCoche = new coche ("Seat", "Panda", 20, "azul", "turismo");
    miCoche.detalles();
    var cocheEmpresa = function (marca, modelo, antiguedad, color, tipo) {
        // públicas
        this.marca = marca;
        this.modelo = modelo;
        this.antiguedad = antiguedad;
        this.color = color;
        this.tipo = tipo;

        // privadas
        var ITVPasada = true;
        var ITVfrecuencia = "Cada año";
        var seguroEnRegla = true;
        var companySeguros = "SegurExpress";
        var tipoSeguro = "a terceros";

        // Público
        this.dameDetalles = function () {
            console.log("Tu coche es un "+marca+" "+modelo+" con "+antiguedad+" años, clase "+tipo+" y color "+color);
        }

        // Privadas
        function datosPrivados() {
            if (ITVPasada && seguroEnRegla)
                console.info("INFO: Todo en Regla, tienes que pasar la ITV "+ITVfrecuencia+". Tienes un seguro "+tipoSeguro+" con "+companySeguros);
            else{
                console.error("ALERTA! El coche no puede usarse. El seguro o la ITV no esta en regla.");
            }
        }

        datosPrivados();
        this.dameDetalles();
    };

    var miCoche = new cocheEmpresa ("Audi", "S8", 2, "negro", "Berlina");
    var miCoche2 = new cocheEmpresa ("Audi", "S4", 2, "Rojo", "Compacto");
    var perro  = function () {
        this.patas = 4;
        this.ojos = 2;
    };

    var pastorAleman = function () {
        this.colorLengua = "negra";
        this.colorOjos = "marrón";
        this.capacidadTrabajo = true;
        this.especialidad = "Pastoreo";
    };

    pastorAleman.prototype = new perro();

    var miPerro = new pastorAleman();
    console.log("Número patas: "+miPerro.patas+"\n Número ojos: "+miPerro.ojos+"\n Color Lengua: "+miPerro.colorLengua+"\n Color ojos: "+miPerro.colorOjos+"\n Capacidad de trabajo: "+miPerro.capacidadTrabajo+"\n Especialidad: "+miPerro.especialidad);

Recuerda que los protipos están presentes en todos los objetos y que estos pueden ser modificados. La flexibilidad de JavaScript nos permite incluso modificar los objetos nativos. Este tipo de cambios no son sencillos y entrañan diversos riesgos ocultos.

     /* Explicación:
     Incluimos un método nuevo en Array que nos permitirá buscar coincidencias dentro de un array.
Este nuevo método estará disponible en todos los arrays de nuestro código, ya que se ha incorporado al prototipo de Array (Array.prototype, "padre" de todos los Arrays).
*/     
Array.prototype.coincidencias = function(palabra) {
        var coincidencias = 0;
        for (var i=0; i<this.length; i++) {
            if (this[i] == palabra) {
                coincidencias++;
            }
        }
        console.warn("Se encontraron "+coincidencias+" coincidencia(s) de la palabra");
    };

    var amigos = ["Charlie", "Marco", "Luis", "Jose", "Miguel", "Jose", "Luis", "Oscar"];
    amigos.coincidencias("Jose");
Array.prototype.push = function () {
console.info("Array.push() ya no funciona");
};

Mañana en clase lo vemos en detalle!