Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2016
    Messaggi
    15

    Cosa sono esattamente i prototipi?

    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!

  2. #2
    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;
    }

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2016
    Messaggi
    15
    Quote Originariamente inviata da lucavizzi Visualizza il messaggio
    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;
    }
    Anzitutto ti ringrazio della risposta. Ma non sono sicura di averla compreso a pieno.

    Allora diciamo che quando creo un costruttore, in automatico al suo interno, viene creata una proprietà prototype.

    Questa proprietà (che serve per modificare il costruttore) cosa è esattamente (un oggetto con quali metodi e proprietà?).

    Ma sopratutto se io istanzio un oggetto da Quadrato() posso accedere al prototype anche dall'oggetto istanziato?

    Esempio

    [code]
    function Quadrato(lato){
    this.figura = "Quadrato";
    this.lato=lato;
    this.perimetro = function(){return lato*4}
    }
    var quadrato1 = new Quadrato(7)

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

    Questo codice qua sopra ha senso? Cosa fa succedere?
    Ultima modifica di ThankGod; 13-03-2017 a 00:31

  4. #4
    Quote Originariamente inviata da ThankGod Visualizza il messaggio
    Allora diciamo che quando creo un costruttore, in automatico al suo interno, viene creata una proprietà prototype.
    Non viene creata una proprietà prototype.
    Prototype è un metodo

    Conosci la differenza tra proprietà e metodi?

  5. #5
    Utente di HTML.it
    Registrato dal
    Nov 2016
    Messaggi
    15
    Luca tu sei stato chiarissimo!!

    Si, un metodo è una proprietà di un oggetto che contiene (per riferimento) una funzione.

    Quindi in sostanza il costruttore è il prototipo (come mi dicevi) e prototype è semplicemente un metodo (interno al costruttore-prototipo) che mi permette di accedere al costruttore stesso e apportarvi modifiche.

    Se ho capito bene la cosa è estremamente semplice.

    Mi sono un pò confusa perché da quel che leggevo in giro avevo capito che prototype fosse il prototipo e non ci capivo più nulla.

    Quindi diciamo che in soldoni qualsiasi costruttore io abbia (sia che lo abbia creato io sia che sia uno di quelli predefiniti in JS) posso accedervi con la sintassi nomeCostruttore.prototype e usarla per aggiungere nuove proprietà e metodi al costruttore.

    Per intenderci, come dicevi tu:


    function Quadrato(lato){
    this.lato = lato;}

    var quadrato1 = new Quadrato(8) //contiene solo la proprietà lato

    Quadrato.prototype.figura = "Quadrato";

    var quadrato2 = new Quadrato(7); //contiene due proprietà (lato e figura)


    La domanda che mi rimane è se uso this per incrementare un costruttore con il metodo prototype... questo this si riferisce all'oggetto incrementato dal costruttore giusto?

    Per esempio (continuando sul nostro Quadrato()):

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

    var quadrato3 = new Quadrato(5) // contiene due proprietà (lato e figura) e un metodo(perimetro()) che ritorna 20

    Giusto?

    E quando si parla di catena di prototipi si parla di catena di costruttori in sostanza? Giusto?

    Cmq grazie, sei troppo gentile ad aiutarmi.

  6. #6
    Quote Originariamente inviata da ThankGod Visualizza il messaggio
    Quadrato.prototype.perimetro = function() {return this.lato*4};
    var quadrato3 = new Quadrato(5) // contiene due proprietà (lato e figura) e un metodo(perimetro()) che ritorna 20

    Giusto?

    Corretto.



    Ti sarebbe utile acquisire le nozioni di base sulla programmazione orientata agli oggetti (OOP), tramite qualche guida su internet o su un libro.

Tag per questa discussione

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.