¿Es necesario inicializar un objecto en angular?

publicado por: Anonymous

Tengo una clase externa export class como template para un objeto.

export class Car{
  name: Boolean;
  other: {
    prize: String;
    brand: String;
  };
  doors: {
    number: String,
    size: String,
  };
}

Intento acceder a ella desde otra clase, por lo que he creado una nueva variable

var car= new Car();

Como name es un boolean, doy por hecho que se inicializa con un true puesto que es su valor predeterminado. Mi problema viene cuando intento inicializar al objecto doors peusto que este no lo tiene.

  var car= new Car();
  this.car.doors[pos].number;

Cuando intento acceder a el me dice que undefined. ¿Cómo podría acceder a él? Imagino que necesito inicializarlo en el constructor.

No necesito inicializar other

solución

Debes inicializarlo en su constructor si quieres acceder a sus atributos, ya que se trata de un “Objeto propio”, te dejo una alternativa:

 export class Car{
  name: Boolean;
  other: Others;
  doors: Doors;

 constructor(){
    this.name = (true / false); //Segun te parezca correcto.
    this.other = new Other(); // Inicializas el objeto Other - Opcional, ya que no lo necesitas
    this.doors = new Doors(); // Inicializas el objeto Doors
 }
}
// Alternativa a class Car ------------------------------------
export class Car {
  constructor(public name: Boolean = true,
              public doors: Doors = new Doors(), 
              public other: Other = new Other()){}

// Esto te permite tener un constructor al que le podrías pasar parámetros y si no lo haces por defecto utiliza lo que se encuentra a la derecha del =
//--------------------------------------------------------------
export class Doors{
    number: String;
    size: String;
}
export class Other {
    prize: String;
    brand: String;
}

var car= new Car(); // Ya te permitiría ingresar a Doors y Others (si fuese necesario)

Las variables dentro de Other y Doors, van a ser undefined si intentas accederlas, ya que no se le asigna ningún valor.

Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *