Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    Ridefinire operatori per particolari oggetti

    Salve a tutti.
    In seguito alla scoperta del magnifico mondo dell'OOP, la progettazione orientata agli oggetti, mi sono creato l'oggetto "color" in javascript con il seguente codice:

    function color(R,G,B)
    {
    this.R = R;
    this.G = G;
    this.B = B;
    this.print = function() {alert("["+this.R+","+this.G+","+this.B+"]");}
    }

    ed ho istanziato due oggetti di tipo color, come segue:

    color1=new color(255,255,255); //bianco
    color2=new color(255,255,0); //giallo

    Ecco ora cosa vorrei fare:

    color3=new color();
    color3=color1-color2;
    color3.print();

    e vorrei ottenere l'alert: "[0,0,255]", ossia la sottrazione, indice a indice, dei due colori. Però ovviamente lo script si blocca perché non sa come effettuare la sottrazione color1-color2, non gliel'ho spiegato.
    È possibile fargli capire, in qualche modo, che quando sottraggo due variabili di tipo 'color' deve eseguire in realtà la funzione:

    {
    color3=new color();
    color3.R = color1.R-color2.R;
    color3.G = color1.G-color2.G;
    color3.B = color1.R-color2.B;
    return color3;
    }

    Ossia, si può "ridefinire" l'operatore "-" contestualmente ai miei oggetti color? So che con C++ si può fare, e contando che javascript è piuttsto simile, speravo ci fosse l'analogo (ma in internet non ho trovato nulla).
    Grazie anticipatamente per l'aiuto!

    Andrea
    Don't know what I want, but I know how to get it...

  2. #2
    Utente di HTML.it L'avatar di Xinod
    Registrato dal
    Sep 2000
    Messaggi
    13,649
    scusa ma una normalissima funzione a cui passi come argomenti i 2 colori?

  3. #3
    Frontend samurai L'avatar di fcaldera
    Registrato dal
    Feb 2003
    Messaggi
    12,924
    ecco, l'ho anche un pò migliorato

    codice:
    <script>
    function color(R,G,B)
    {
        this.R = R || 0; // 0 default se non definito
        this.G = G || 0;
        this.B = B || 0;
        
        this.print = function() {
            alert("["+this.R+","+this.G+","+this.B+"]");
        }
        
        this.subtract = function(obj1, obj2) {
            this.R = Math.abs(obj1.R - obj2.R);        
            this.G = Math.abs(obj1.G - obj2.G);        
            this.B = Math.abs(obj1.B - obj2.B);        
        }
    }
    
    
    color1=new color(255,255,10); //quasi bianco
    color2=new color(120,176,255); //un blu di qualche tipo 
    
    color3=new color();
    color3.subtract(color1, color2); // sottrae colore2 da colore1
    color3.print();
    </script>
    Ciao
    Vuoi aiutare la riforestazione responsabile?

    Iscriviti a Ecologi e inizia a rimuovere la tua impronta ecologica (30 alberi extra usando il referral)

  4. #4
    In realtà ci avevo già pensato al metodo "subtract", io l'avevo scritto così:

    this.subtract = function(col2)
    {
    c=new color();
    c.R = this.R-col2.R;
    c.G = this.G-col2.G;
    c.B = this.R-col2.B;
    return c;
    }

    e la chiamata:

    color3=color1.subtract(color2);

    Comunque faccio tesoro del "Math.abs" e del "|| 0" per i valori di default.
    Grazie.

    Andrea
    Don't know what I want, but I know how to get it...

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