lunes, 2 de diciembre de 2019

Tema 4 -- Objetos definidos por el usuario. Funciones.


Objetos definidos por el usuario. Funciones.


Formas de crear un objeto:


1º Forma:

let coche = new Object();

coche.puertas = "2";

coche.ruedas = "4";
coche.color = "azul";

coche.darColor = function () { “Mi color es: ” + coche.color};


2º Forma:
let coche = {
  puertas: "2",
  ruedas: "4",
  color: "azul",
  darColor : function() { return `Mi color es ${coche.color}`};
  darColor : function() { return `Mi color es ${this.color}`};
};



let usuario = new Object();
usuario.nombre = "Tomasa";
usuario.edad = 17;




Acceso a las propiedades de los objetos
Usando "."
console.log( "Nombre del usuario:" + usuario.nombre );
console.log("Edad del usuario:" + usuario.edad );


Usando el nombre de la propiedad que queremos acceder
console.log("Nombre del usuario: " + usuario["nombre"]);

Usando una variable que contenga el valor

var nombrePropiedad = "nombre";
console.log("Nombre del usuario: " + usuario[nombrePropiedad]);

Otro ejemplo:
let usuario = { nombre = "Peter"  , apellido = "Pan"  , edad = 103 };
let clave = prompt ( "¿Qué valor desea conocer sobre su perfil: nombre, apellido o edad ? ");
console.log ( usuario[clave] ); 




Asignar/Modificar valores a una propiedad

Con el operador "." accedemos a la propiedad a modificar/asignar y le añadimos el valor.
usuario.edad = 17.5;



Eliminar una propiedad
 
delete  usuario.edad;


Recorrer las variables de un objeto: FOR ... IN ...

for ( propiedad in coche){ 
console.log(“Propiedad = “+ propiedad + “con valor “ + coche[propiedad] ) }


let usuario = { nombre : "Tomasa" , edad : 17  };

for ( propi in usuario)
{
    console.log("Propiedad= " + propi + "con valor " + usuario[propi] );
}


Funciones dentro de un objeto: método

La sintaxis para crear una función dentro de un objeto es la siguiente:
<nombre_método> :  function ( arg1, arg2, … )  { // instrucciones };
Y el acceso al mismo sería de la forma:
<nombre_objeto> . <nombre_método>();
Veamos un ejemplo:
let usuario = {
  nombre : "Tomasa" ,
  edad : 17 ,
  devolverDatosUsuario : function () { return "Nombre: " + this.nombre + " - Edad: " + this.edad };
}
usuario.devolverDatosUsuario();


También podríamos crearlo de la siguiente forma:
var objeto = new Object();
objeto.saludar = function() { console.log("Hola amigo!"); };




Construir métodos mediante clases



Declaración e instanciación de clases:
class Coordenada {
  constructor(x, y) {
this.x = x;
this.y = y;
  }
}


Creación de métodos en clases:

class Coordenada {
  constructor(x, y) {
this.x = x;
this.y = y;
  }

  //Forma resumida
  esIgual(coordenada) {
if (this.x == coordenada.x && this.y == coordenada.y) {
    return true;
}
  return false;
  }

  //Forma tradicional
  imprimirCoordenadas = function () {
       console.log(`La x es ${this.x} y la y es ${this.y}`);
  }
} Métodos estáticos:
class Caracola{
   static saludar () {
      console.log(“Hola”);
   }

   saludarUsu(mensaje){
   return “Hola Caracola” + mensaje;
   }
}

let c = new Caracola();
console.log(c.saludarUsu(“Jose”));
Caracola.saludar();


Métodos y propiedades privadas:
Han de ser declarados dentro de nuestro constructor sin utilizar la palabra reservada “this”.

Para acceder a estas propiedades y métodos “privados” debemos crear funciones que los manipulen “dentro del mismo constructor”

class User {

constructor(name, password, email) {
        let name     = name;
        let password = password;
        let email    = email;
       
        let privado  = function() {
          console.log("Accediste a un método privado");
        }
       
        this.getPrivado = function(){ privado(); }
        this.getNombre = function(){return name;}
  }
} ---- var u = new User("usuario","123","usuario@example.com");
u.getPrivado();
console.log(u.name);
console.log(u.password);
console.log(u.getNombre());
Herencia con clases en ES6

Se usa extends para heredar de otras clases, se usa super() para llamar a los constructores, y métodos de las clases padre y se usa instanceOf para comprobar de que tipo es el objeto.

console.log( 'PerroZombie es una instancia de \' Object? ' , perroZombi instanceof Object ) ;
console.log( 'PerroZombie es una instancia de \' Cría? ' , perroZombi instanceof Criatura ) ;
console.log( 'PerroZombie es una instancia de \' Perro? ' , perroZombi instanceof Perro ) ;
console.log( 'PerroZombie es una instancia de \' PerroZombie? ' , perroZombi instanceof PerroZombi );

instanceOf devuelve true o false