Objetos en JavaScript
JavaScript está diseñado mediante un paradigma simple basado en objetos. Estos objetos contienen un conjunto de propiedades mediante asociaciones clave-valor que pueden representar objetos del mundo real. Si eres nuevo en este paradigma puedes leer nuestro artículo Introducción a la Programacion Orientada a Objetos.
Inicializacion de objetos
Para crear e inicializar un objeto podemos utilizar el objeto Object.
const myCar = new Object();
myCar.make = 'Ford';
myCar.model = 'Mustang';
myCar.year = 1969;
Para definir cada propiedad se utiliza la notación de punto (myCar.make), al igual que para acceder a ellas con el nombre del objeto. También es posible utilizar la sintáxis de inicialización de objeto así:
const myCar = {
make: 'Ford',
model: 'Mustang',
year: 1969
};
Los objetos son llamados a veces también arrays asociativos ya que es posible acceder a las propiedades como si fuera un array clave-valor.
myCar.make; // Ford
myCar["make"]; // Ford
Un hecho bastante curioso sobre la creación de propiedades en objetos, es que a pesar de que no se pueda crear una key con caracteres especiales puedes de igual manera hacerlo tratándolos como listas o arrays. El siguiente código arrojaría el error Uncaught SyntaxError: Unexpected token '-'.
const obj = {
first-name: 'Steave'
} Sin embargo puedes utilizar el siguiente hack.
const obj = {};
obj['first-name'] = 'Steave'
O bien
const obj = {
'first-name': 'Steave'
};
Función constructora
De manera alternativa también es posible crear un objeto utilizando una función constructora.
let Person = function(firstName, lastName) {
this.firstName = firstName
this.lastName = lastName
}
// otra forma de hacerlo es esta
function Person(firstName, lastName) {
this.firstName = firstName
this.lastName = lastName
}
De esta forma podría utilizar el operador new y pasar los argumentos en el "constructor".
let person = new Person('Steave', 'Jobs')
person.firstName; // Steave
Esta forma de crear objetos es tal vez mucho más familiar a la programación orientada a objetos de la mayoría de languajes. Esto se trata mucho más a fondo en nuestro artículo Clases en JavaScript.
Object.create
Otra forma de crear un objeto consiste en utilizar Object.create. Este método es bastante útil ya que permite definir el prototipo desde el cual será creado el objeto.
const Animal = {
type: 'Invertebrates', // Default value of properties
displayType() { // Method which will display type of Animal
console.log(this.type);
}
};
// Create new animal type called animal1
const animal1 = Object.create(Animal);
animal1.displayType(); // Output: Invertebrates
Enumerabilidad
Una propiedad es enumerable cuando se puede recorrer. Las propiedades asignadas mediante notación de punto o mediante la inicialización de objeto son automáticamente enumerables. Sin embargo, propiedades definidas con Object.defineProperty no lo son.
let car = {};
car.make = 'Ford';
car.model = 2000;
Object.defineProperty(car, 'DEPRECATED', {value: true, writable: false});
for (item in car) {
console.log(`Item: ${car[item]}`)
}
El código anterior imprimirá:
Item: Ford
Item: 2000
Sin embargo podemos acceder a la propiedad no enumerable mediante la notación de punto.
car.DEPRECATED; // true
Tanto el valor como la key de la propiedad no es iterable. Observa que obtenemos con Object.keys.
Object.keys(car); // ['make', 'model']