Cosa sono i prototipi in JavaScript?
sobes.tech AI
Risposta dell'AI
In JavaScript, gli oggetti possono ereditare proprietà e metodi da altri oggetti attraverso il meccanismo dei prototipi. Ogni oggetto in JavaScript ha una proprietà interna nascosta [[Prototype]], che punta a un altro oggetto, il suo prototipo. Quando si accede a una proprietà o metodo di un oggetto, il motore JavaScript lo cerca prima nell'oggetto stesso. Se non lo trova, si rivolge alla proprietà [[Prototype]] e cerca nel prototipo. Questo processo si ripete lungo la catena dei prototipi fino a trovare la proprietà o raggiungere null (fine della catena).
Concetti principali:
- Catenza di prototipi: Sequenza di oggetti collegati tramite la proprietà
[[Prototype]]. - Eredità: Gli oggetti ereditano proprietà e metodi dai loro prototipi.
__proto__: Proprietà storicamente usata (anche se non standardizzata inizialmente) per accedere a[[Prototype]]. Attualmente, si preferisce usareObject.getPrototypeOf().prototype: Proprietà del costruttore a cui[[Prototype]]fa riferimento nelle istanze create con quel costruttore.
Esempio con costruttore e prototipo:
// Costruttore
function Person(name, age) {
this.name = name;
this.age = age;
}
// Aggiungi metodo al prototipo
Person.prototype.sayHello = function() {
console.log("Ciao, il mio nome è " + this.name);
};
// Crea un'istanza
const person1 = new Person("Alice", 30);
// Chiama il metodo dal prototipo
person1.sayHello(); // Output: Ciao, il mio nome è Alice
// Accesso al prototipo dell'istanza
console.log(Object.getPrototypeOf(person1) === Person.prototype); // Output: true
In questo esempio:
Personè una funzione costruttore.Person.prototypeè l'oggetto che funge da prototipo per tutte le istanze create connew Person().sayHelloè un metodo aggiunto al prototipo. Tutte le istanze diPersonereditano questo metodo.- Quando si chiama
person1.sayHello(), il motore JavaScript cercasayHelloinperson1. Se non lo trova, si rivolge al[[Prototype]]diperson1(che è uguale aPerson.prototype) e trova il metodo lì.
I prototipi consentono un uso efficiente della memoria, poiché i metodi e le proprietà comuni sono memorizzati nel prototipo, anziché duplicati in ogni istanza di oggetto.