JavaScript - Metodi oggetto ES5

Ciao a tutti, futuri maghi di JavaScript! Oggi ci immergeremo nel mondo magico dei metodi oggetto ES5. Non preoccupatevi se siete nuovi al编程 – sarò il vostro guida amichevole in questa avventura, e procederemo passo per passo. Alla fine di questo tutorial, manipolerete gli oggetti come un professionista!

JavaScript - ES5 Object Methods

Metodi oggetto JavaScript ES5

Prima di iniziare, ripassiamo rapidamente cosa sono gli oggetti in JavaScript. Pensa a un oggetto come a un contenitore che contiene informazioni correlate. Per esempio, un oggetto "car" potrebbe contenere proprietà come colore, marca e anno.

let car = {
color: "red",
brand: "Toyota",
year: 2020
};

Ora, ES5 ha introdotto diversi metodi potenti per lavorare con questi oggetti. Esploriamoli uno per uno!

Metodo JavaScript Object.create()

Il metodo Object.create() ci permette di creare un nuovo oggetto utilizzando un oggetto esistente come prototype. È come dire, "Ehi JavaScript, crea per me un nuovo oggetto che eredita da questo altro oggetto!"

let animal = {
makeSound: function() {
console.log("Some generic animal sound");
}
};

let dog = Object.create(animal);
dog.makeSound(); // Output: Some generic animal sound

dog.bark = function() {
console.log("Woof woof!");
};

dog.bark(); // Output: Woof woof!

In questo esempio, abbiamo creato un oggetto dog che eredita dal oggetto animal. Il dog può utilizzare il metodo makeSound da animal, ma ha anche il suo metodo bark.

Metodo JavaScript Object.defineProperty()

Object.defineProperty() ci permette di aggiungere o modificare una proprietà di un oggetto. È come poter aggiungere una nuova funzione alla tua auto dopo averla acquistata!

let person = {};

Object.defineProperty(person, "name", {
value: "John",
writable: false,
enumerable: true,
configurable: true
});

console.log(person.name); // Output: John
person.name = "Jane"; // Questo non cambierà il nome
console.log(person.name); // Output: John

Qui, abbiamo aggiunto una proprietà name all'oggetto person. L'abbiamo impostata come non scrivibile, il che significa che non possiamo cambiare il suo valore dopo che è stato impostato.

Metodo JavaScript Object.defineProperties()

Object.defineProperties() è come defineProperty(), ma potenziato! Permette di definire più proprietà contemporaneamente.

let book = {};

Object.defineProperties(book, {
title: {
value: "The Great Gatsby",
writable: true
},
author: {
value: "F. Scott Fitzgerald",
writable: false
}
});

console.log(book.title); // Output: The Great Gatsby
console.log(book.author); // Output: F. Scott Fitzgerald

book.title = "Gatsby"; // Questo funziona
book.author = "Scott"; // Questo non funziona

console.log(book.title); // Output: Gatsby
console.log(book.author); // Output: F. Scott Fitzgerald

In questo esempio, abbiamo definito due proprietà per il nostro oggetto book in una volta. La title è scrivibile, ma l'author non lo è.

Metodo JavaScript Object.getOwnPropertyDescriptor()

Questo metodo ci permette di ottenere la descrizione di una proprietà. È come chiedere le specifiche di una particolare funzione della tua auto.

let car = {
brand: "Toyota"
};

let descriptor = Object.getOwnPropertyDescriptor(car, "brand");

console.log(descriptor);
// Output:
// {
//   value: "Toyota",
//   writable: true,
//   enumerable: true,
//   configurable: true
// }

Qui, stiamo ottenere il descrittore della proprietà brand del nostro oggetto car. Ci dice il valore e se la proprietà è scrivibile, enumerabile e configurabile.

Metodo JavaScript Object.getOwnPropertyNames()

Questo metodo restituisce un array di tutte le proprietà (enumerabili o meno) trovate direttamente in un dato oggetto. È come ottenere una lista di tutte le funzioni della tua auto, anche quelle nascoste!

let person = {
name: "John",
age: 30
};

Object.defineProperty(person, "ssn", {
value: "123-45-6789",
enumerable: false
});

console.log(Object.getOwnPropertyNames(person));
// Output: ["name", "age", "ssn"]

Anche se abbiamo reso ssn non enumerabile, getOwnPropertyNames() lo include comunque nella lista.

Metodo JavaScript Object.getPrototypeOf()

Questo metodo restituisce il prototype dell'oggetto specificato. È come chiedere, "Chi è il tuo genitore?"

let animal = {
eats: true
};

let rabbit = Object.create(animal);

console.log(Object.getPrototypeOf(rabbit) === animal); // Output: true

Qui, confermiamo che il prototype di rabbit è davvero l'oggetto animal.

Metodo JavaScript Object.keys()

Object.keys() restituisce un array dei nomi delle proprietà enumerabili di un dato oggetto. È come ottenere una lista di tutte le funzioni visibili della tua auto.

let car = {
brand: "Toyota",
model: "Corolla",
year: 2020
};

console.log(Object.keys(car));
// Output: ["brand", "model", "year"]

Questo metodo restituisce solo le proprietà enumerabili, diversamente da getOwnPropertyNames() che restituisce tutte le proprietà.

Metodo JavaScript Object.freeze()

Object.freeze() congela un oggetto. Un oggetto congelato non può più essere modificato. È come mettere la tua auto in un blocco di ghiaccio – non puoi aggiungere, rimuovere o modificare le sue proprietà!

let car = {
brand: "Toyota",
model: "Corolla"
};

Object.freeze(car);

car.year = 2020; // Questo non funzionerà
car.brand = "Honda"; // Questo non funzionerà nemmeno

console.log(car); // Output: { brand: "Toyota", model: "Corolla" }

Dopo aver congelato l'oggetto car, non possiamo aggiungere la proprietà year o modificare il brand.

Metodo JavaScript Object.seal()

Object.seal() sigilla un oggetto, impedendo l'aggiunta di nuove proprietà e segnando tutte le proprietà esistenti come non configurabili. È come sigillare la tua auto – non puoi aggiungere nuove funzioni, ma puoi ancora modificare quelle esistenti.

let person = {
name: "John",
age: 30
};

Object.seal(person);

person.gender = "Male"; // Questo non funzionerà
person.age = 31; // Questo funziona

delete person.name; // Questo non funzionerà

console.log(person); // Output: { name: "John", age: 31 }

Possiamo cambiare age, ma non possiamo aggiungere gender o eliminare name.

Metodo JavaScript Object.isFrozen()

Questo metodo determina se un oggetto è congelato. È come controllare se la tua auto è davvero intrappolata nel blocco di ghiaccio!

let car = {
brand: "Toyota"
};

console.log(Object.isFrozen(car)); // Output: false

Object.freeze(car);

console.log(Object.isFrozen(car)); // Output: true

Metodo JavaScript Object.isSealed()

Simile a isFrozen(), questo metodo controlla se un oggetto è sigillato.

let person = {
name: "John"
};

console.log(Object.isSealed(person)); // Output: false

Object.seal(person);

console.log(Object.isSealed(person)); // Output: true

Metodo JavaScript Object.preventExtensions()

Questo metodo impedisce l'aggiunta di nuove proprietà a un oggetto. È come mettere un cartello "Non più funzioni" sulla tua auto.

let car = {
brand: "Toyota"
};

Object.preventExtensions(car);

car.model = "Corolla"; // Questo non funzionerà

console.log(car); // Output: { brand: "Toyota" }

Dopo aver impedito le estensioni, non possiamo aggiungere la proprietà model.

Metodo JavaScript Object.isExtensible()

Questo metodo determina se un oggetto è estensibile (se può avere nuove proprietà aggiunte).

let car = {
brand: "Toyota"
};

console.log(Object.isExtensible(car)); // Output: true

Object.preventExtensions(car);

console.log(Object.isExtensible(car)); // Output: false

Ecco un riassunto di tutti i metodi che abbiamo trattato:

Metodo Descrizione
Object.create() Crea un nuovo oggetto con il prototype specificato e le proprietà
Object.defineProperty() Aggiunge la proprietà descritta da un dato descrittore a un oggetto
Object.defineProperties() Definisce nuove o modifica proprietà esistenti direttamente su un oggetto, restituendo l'oggetto
Object.getOwnPropertyDescriptor() Restituisce un descrittore di proprietà per una proprietà propria di un oggetto
Object.getOwnPropertyNames() Restituisce un array di tutte le proprietà trovate direttamente in un dato oggetto
Object.getPrototypeOf() Restituisce il prototype dell'oggetto specificato
Object.keys() Restituisce un array dei nomi delle proprietà enumerabili di un dato oggetto
Object.freeze() Congela un oggetto: altre code non possono cancellare o modificare le sue proprietà
Object.seal() Sigilla un oggetto, impedendo l'aggiunta di nuove proprietà e segnando tutte le proprietà esistenti come non configurabili
Object.isFrozen() Determina se un oggetto è congelato
Object.isSealed() Determina se un oggetto è sigillato
Object.preventExtensions() Impedisce l'aggiunta di nuove proprietà a un oggetto
Object.isExtensible() Determina se un oggetto è estensibile

Ecco! Avete appena fatto un grand tour dei metodi oggetto ES5. Ricorda, la pratica fa la perfezione, quindi non esitare a sperimentare con questi metodi nel tuo codice. Buon coding, futuri maestri di JavaScript!

Credits: Image by storyset