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

    scope variabili globali classe

    Ciao a tutti.
    all'interno di una classe non risco ad accedere ad accere ad una variabile pubblica con una funzione privata.

    esempio:
    codice:
    function Giocatore (){
    
    	this.carte = [];
    	this.num = 0;
    	this.pos = {x: 0, y: 0};
    }
    
    function Cavacamisa (ctx){
    
        var ctx = ctx;
        this.giocatoreSx = new Giocatore();
        this.giocatoreDX = new Giocatore();
        
        this.test = function() {
            alert(this.giocatoreSx.pos.x);
        }
        
        this.main = function(){
            this.giocatoreSx.pos.x = 100;
            this.giocatoreSx.pos.x = 100;
        }
        this.main();
    }
    se volessi rendere privata la funzione main() facendo in questo modo:
    codice:
    function Cavacamisa (ctx){
    
        var ctx = ctx;
        this.giocatoreSx = new Giocatore();
        this.giocatoreDX = new Giocatore();
        
        this.test = function() {
            alert(this.giocatoreSx.pos.x);
        }
        
        function main(){
            this.giocatoreSx.pos.x = 100;
            this.giocatoreDx.pos.x = 100;
        }
        main();
    }
    No funziona perchè non mi permette di accedere alla variabile giocatoreSX e DX
    ho provato in vari modi ma non riesco a trovare una soluzione.
    Grazie per la pazienza.
    un uomo senza panza e come un cielo senza stelle ...mio tris ...

  2. #2
    L'argomento è un po complesso, e proprio per questo interessante, ho fatto un grosso respiro e ho provato a leggere l'interessante guida:
    http://www.html.it/guide/guida-javas...iche-avanzate/

    devo dire che al signor Alberto darei un 'bacio' perchè mi ha fatto capire che l'orrizzonte è molto più ampio di quello che credevo.

    Cosi ho modificato il codice e ho provato a usare il Module Pattern, è un sistema molto particolare perchè si discosta molto dal modo che hanno altri linguaggi come Java e c# di gestire le classi.

    Cosi Funziona !!

    codice:
    var canvas = document.getElementById('canvas');
    var ctx = canvas.getContext('2d');
    
    var Giocatore = function(){
    	
    	var carte = []; // Arrei con le carte in mano al giocatore
    	var num = 0; // Numero di carte da giocare
    	var pos = {x: 0, y: 0}; // posizione nel canvas
    	
    	return {
    	    carte: carte,
    	    pos: pos
    	}
    	
    }();
    
    var Cavacamisa = function(ctx){
     
        var ctx = ctx;
        var giocatoreSx = Giocatore;
        var giocatoreDx = Giocatore;
        
      
        var main = function(){
            giocatoreSx.pos.x = 120;
            giocatoreSx.pos.y = 20;
            giocatoreDx.pos.x = 780;
            giocatoreDx.pos.y = 20;
        }
        main();
        
        return{
            test: function(){
                alert(giocatoreSx.pos.x);
            }
        }
    }(ctx);
    Non so se avrò il coraggio di continuare, ma queste possibilità mi aprono la mente e la voglia.
    un uomo senza panza e come un cielo senza stelle ...mio tris ...

  3. #3
    P.S.
    Qualcuno mi sa spiegare chiaramente dove stà il confine tra una funzione ed una classe?
    Scusate
    ciao
    un uomo senza panza e come un cielo senza stelle ...mio tris ...

  4. #4
    Ciao, bella domanda
    In javascript non ci sono classi perchè
    usa un eredita di tipo prototype.
    http://stackoverflow.com/questions/1...tion-and-class
    ad ogni modo dipende dal modo di come
    invochi/istanzi una funzione

    var v = f(); //funzione
    var o = new f(); //'classe'

    ti consiglio un classico


    http://forum.html.it/forum/showthrea...readid=1014613

    Without faith, nothing is possible. With it, nothing is impossible
    http://ilwebdifabio.it

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2005
    Messaggi
    50
    Occhio che giocatoreSx e giocatoreDx sono una la copia dell'altro con quel codice!

    Io ti consiglio di fare così:

    codice:
    var Giocatore = function(){
      this.carte = []; 
      this.num = 0;
      this.pos = {x: 0, y: 0}; 
    };

    Poi all'interno di Cavacamisa

    codice:
        var giocatoreSx = new Giocatore();
        var giocatoreDx = new Giocatore();

  6. #6
    Originariamente inviato da AlessioR
    Occhio che giocatoreSx e giocatoreDx sono una la copia dell'altro con quel codice!

    Io ti consiglio di fare così:

    codice:
    var Giocatore = function(){
      this.carte = []; 
      this.num = 0;
      this.pos = {x: 0, y: 0}; 
    };

    Poi all'interno di Cavacamisa

    codice:
        var giocatoreSx = new Giocatore();
        var giocatoreDx = new Giocatore();
    Hai ragione, me ne sono accorto andando avanti con le prove, ho dovuto modificarlo come da te indicato.
    GRAZIE
    un uomo senza panza e come un cielo senza stelle ...mio tris ...

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.