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']