arrow_back Volver
Inicio keyboard_arrow_right Artículos keyboard_arrow_right Artículo

Privacidad de atributos en Javascript

Jared HZ

Estudiante

av_timer 1 Min. de lectura

remove_red_eye 5958 visitas

calendar_today 08 Octubre 2018

Cómo es sabido una de las caracteristicas principales de cualquier lenguaje de programación orientada a objetos es la posibilidad de agregarle privacidad a algunos atributos previamente identificados, este principio tiene el nombre de encapsulamiento.

Esto nos ayuda para controlar el comportamiento de un objeto, denegando que otros puedan acceder o cambiar valores a sus atributos o usar sus métodos que no deberían de ser usados. Un ejemplo simple sería algo así:

Supongamos que tenemos una clase Automovil que tiene un atributo propietario que es un objeto de la clase Persona, si los atributos de la clase Persona no estuvieran protegidos , la Clase Automovil podría cambiar el nombre de una manera poco ortodoxa , en Java sería algo así "propietario.nombre = "Maria" " algo que no es recomendado y que es un error a la hora de programar Orientado a objetos, para eso tenemos que establecer como privado los atributos de Persona y crear métodos "Set" y "Gets" para los valores que queramos acceder en otra parte del programa "propietario.setNombre("Maria")".

Ahora el problema en Javascript es que no existe la forma de hacer los atributos privados (recordemos en Javascript no existen clases como tal ya que es orientado a objetos basado en prototipos). Supongamos que queremos hacer el mismo ejemplo (sin utilizar class de ecmascript 6) sería algo cómo:

let Persona = function(){
  let nombre = ''";
  let edad = ""
}

Aquí no hay una forma "sencilla" de hacer nombre y edad privados como por ejemplo en Java. Tendremós que solucionar esto de una manera un poco creativa. Una de las maneras de agregarle privacidad a los atributos de un Objeto en javascript sería la siguiente:

var Persona = function() {
  var nombre = ''";
  var edad = ''";
  return {
     setNombre: function(nom){
       nombre = nom;
    },
    getNombre: function() {
      return nombre;
    }
  }
}

Aquí aprovechamos el scope de función que tiene Javascript para hacer las variables privadas y tener acceso al valor de estas mediante los métodos get que creemos .

var Automovil = function(){
  var marca = ''";
  var propietario = new Persona();
  return {
    setMarca: function(marc){
      this.marca = marc;
    },
    getMarca: function() {
      return this.marca;
    },
    getPropietario: function(){
      return this.propietario;
    }
  }
}

var ford = new Automovil();

ford.getPropietario()   .setNombre('Maria');

console.log(ford.getPropietario().getNombre());

Y aquí completamos el ejemplo.

Bootcamp Ciencia de Datos

12 semanas de formación intensiva en los conocimientos, fundamentos, y herramientas que necesitas para ser científico de datos

Más información