Quote Originariamente inviata da ThankGod Visualizza il messaggio
Buonasera ragazzi,

ormai lo sapete che mi sono intrippata con Javascript e che ho ogni tanto bisogno di un piccolo aiuto!

Se qualche buon anima avesse il tempo di spiegarmi cosa è un prototipo????

In sostanza credo di aver capito che i costruttori altro non sono che funzioni. Al loro interno abbiamo una serie di incrementi dell'oggetto this. Quando usiamo new funzioneCostruttore(), succede che viene creato un oggetto e 'passato' al costruttore come oggetto del contesto esecutivo, pertanto tutti gli incrementi fatti con this hanno effetto su questo nuovo oggetto.

Esempio

function Quadrato(lato){
this.figura = "Quadrato";
this.lato=lato;
this.perimetro = function(){return lato*4}
}

var quadrato1 = new Quadrato(8) //ritorna un oggetto (quadrato1) con proprietà e metodi definiti nel costruttore

E fin qui mi pare di esserci (correggetemi se sbaglio).

Poi si inizia a parlare della proprietà prototype del costruttore... e mi inizio un pò a perdere....



Grazie a tutti!


Il prototipo è proprio "Quadrato", il costruttore.

codice:
function Quadrato(lato){
    this.figura = "Quadrato";
    this.lato=lato; 
    this.perimetro = function(){return lato*4}
}

Come suggerisce il nome "prototipo", Quadrato è un modello che verrà usato per tutte le istanze, appunto un prototipo.




La proprietà "prototype" ti permette di modificare il prototipo.

Se tu avessi:
codice:
var quadrato1 = new Quadrato(8)
e volessi aggiungere la proprietà "colore", scriveresti:
codice:
quadrato1.colore='rosso';
Non potresti però usare lo stesso sistema per modificare il prototipo, in quanto non è un oggetto.
Per modificare il prototipo puoi usare il metodo "prototype":

codice:
function Quadrato(lato){
    this.figura = "Quadrato";
    this.lato=lato; 
    this.perimetro = function(){return lato*4}
}
Quadrato.prototype.colore = "Rosso";

var square= new Quadrato(5);

alert(square.colore);
Oltre a poter aggiungere delle proprietà, con il metodo prototype, puoi anche aggiungere metodi al tuo prototipo:

codice:
function Quadrato(lato){
    this.figura = "Quadrato";
    this.lato=lato; 
    this.perimetro = function(){return lato*4}
}

Quadrato.prototype.area= function(){
   return this.lato*this.lato;
}