Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    776

    Javascript, estendere una classe

    Ciao a tutti,

    avrei bisogno di estendere una classe in javascript.

    Mettiamo il caso di avere:
    codice:
    function Veicolo(ruote,colore){
    this.ruote=ruote;
    this.colore=colore;
    this.accelera=function(velocita){console.log("Vado a "+velocita);};
    }
    Adesso vorrei estendere (extends) questa classe "Veicolo" in modo da avere una classe "Automobile" che accetti gli stessi argomenti quando viene istanziata, ovvero 'ruote' e 'colore', che abbia un nuovo metodo ad esempio frena(secondiFrenata), vorrei poter fare:

    codice:
    var bmw=new Automobile(4,"blu");
    bmw.accelera(130);
    bmw.frena(10);
    Mi potreste aiutare?

    Grazie,
    Roberto

  2. #2
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    776
    Ho risolto così:

    codice:
    function Automobile(ruote,colore) {
     Veicolo.call(this, ruote,colore);
     this.frena=function(secondi){console.log("Ho frenato in "+secondi);};
    }
    C'è qualche inconveniente ad utilizzare questo sistema?

    Grazie,
    Roberto

  3. #3
    Utente di HTML.it L'avatar di carlomarx
    Registrato dal
    Oct 2009
    Messaggi
    1,669
    Ci sono due inconvenienti di piccolo taglio col tuo codice:

    1. Il prototipo non viene ereditato – “ (new Automobile(4, "blu")) instanceof Veicolo” restituisce false col tuo codice;
    2. Crei delle closures – se puoi, i metodi appendili sempre al prototipo invece di appenderli ogni volta alle istanze.

    Ti giro un esempio chiarificatore:

    codice:
    /* Creo il costruttore "Veicolo" */
    function Veicolo (ruote, colore){
        this.ruote = ruote;
        this.colore = colore;
    }
    
    /* Creo il costruttore "Automobile" */
    function Automobile (ruote, colore) {
         Veicolo.call(this, ruote, colore);
    }
    
    /* Rendo un'istanza di "Veicolo" prototipo del costruttore "Automobile" */
    Automobile.prototype = Object.create(Veicolo.prototype);
    Automobile.prototype.constructor = Automobile;
    
    /* Creo i metodi; quelli di "Veicolo" verranno ereditati da "Automobile", ma non viceversa */
    Veicolo.prototype.accelera = function (velocita) {
        console.log("Vado a " + velocita);
    };
    
    Automobile.prototype.frena = function (secondi) {
        console.log("Ho frenato in " + secondi);
    };

    Testiamo l'ereditarietà…

    codice:
    var miaAuto = new Automobile(4, "blu");
    
    alert(miaAuto instanceof Automobile); // true
    alert(miaAuto instanceof Veicolo); // true

    P.S. Non esistono classi in JS (è quindi scorretto chiamarle tali), ma esiste di meglio: i costruttori!
    Ultima modifica di carlomarx; 07-02-2015 a 15:42
    Tutto ciò che fai con jQuery puoi farlo meglio e con la metà del codice in puro JavaScript.

  4. #4
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    776
    Ciao,

    scusa per la tardiva risposta!
    Ti ringrazio molto della spiegazione, adesso mi è più chiaro!

    Roberto

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 © 2025 vBulletin Solutions, Inc. All rights reserved.