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

    funzioni di 2 o più file js diversi in "confilitto"

    Salve ragazzi ho un piccolo problema con alcuni script..
    Nel tempo libero mi diverto un sacco a creare dei piccoli minigames in javascript e jquery, nel mio sito ne ho pubblicati un paio ( http://vincenzobrizzi.altervista.org...php#videogames ) e mi sono accorto di un problema: nei rispettivi file .js, per semplicità, mi è capitato spesso di utilizzare lo stesso nome per delle funzioni simili (ad esempio run() oppure stop() e così via).
    Una volta caricati nel sito però mi sono accorto che queste funzioni (e addirittura le variabili tipo la classica "tempo") venivano eseguite (modificate nel caso delle variabili) "a casaccio", nel senso che lo script caricato per ultimo (tag <script ... ></script> nell'header) mi sostituiva tutta la roba "omonima" degli altri..

    Per risolvere, al momento, ho dovuto modificare tutti i nomi delle funzioni/variabili identici a quelli negli altri script, però sono rimasto un'attimo confuso da questo errore poichè ero convinto che un js non potesse "comunicare" con un altro!

    Mi chiedo: come si può ovviare al problema? E' davvero scomodo programmare pensando ai nomi di funzioni "da scartare" :P vorrei sapere se c'è un modo per dire allo script "ehi, tutte le funzioni che ti servono le trovi in QUESTO js, non andare a cercare altrove!"

    Ringrazio chiunque si prenderà la briga di rispondermi, ciao!
    Ultima modifica di VincenzoB92; 16-09-2014 a 20:27 Motivo: dimenticanza!

  2. #2
    Utente di HTML.it
    Registrato dal
    Feb 2014
    residenza
    Voltati
    Messaggi
    913
    Puoi fare così:

    codice:
    Gioco1 = {
        run: function () {
        },
        stop: function () {
        }
        // ...
    };
    
    Gioco2 = {
        run: function () {
        },
        stop: function () {
        }
        // ...
    };
    E richiamarle:
    codice:
    Gioco1.run();
    No

  3. #3
    Quote Originariamente inviata da tampertools Visualizza il messaggio
    Puoi fare così:

    codice:
    Gioco1 = {
        run: function () {
        },
        stop: function () {
        }
        // ...
    };
    
    Gioco2 = {
        run: function () {
        },
        stop: function () {
        }
        // ...
    };
    E richiamarle:
    codice:
    Gioco1.run();
    Ciao tampertools, grazie della dritta! Ps se volessi richiamarle però dal "gioco" stesso?

    Della serie

    nel file .js
    codice:
    Gioco1 = {
       run: function() {
       },
       stop: function(){
       },
       init: function(){
          run();
       },
       ...
    }

    e nella pag html
    codice:
    <script>
      onload = function(){
        Gioco1.init();
      }
    </script>

    Ho scritto qualcosa di "fattibile" oppure devo fare in qualche altro modo?

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2014
    residenza
    Voltati
    Messaggi
    913
    codice:
    Gioco1 = {
       run: function() {
       },
       stop: function(){
       },
       init: function(){
          Gioco1.run();
       },
       ...
    }
    Oppure puoi fare così (forse meglio)
    codice:
    var Gioco1 = (function () {
        var run = function () {
        };
        var stop = function () {
        };
        var init = function () {
            run();
        };
        return { // Esporti le funzioni accessibili dall'esterno
            init: init;
        }
    })();
    No

  5. #5
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,771
    O anche:
    codice:
    Gioco1 = {
       run: function() {
         alert('ruuun');
       },
       stop: function(){
       },
       init: function(){
          this.run();
       }
    };
    Gioco1.init()
    Installa Forum HTML.it Toolset per una fruizione ottimale del Forum

  6. #6
    Quote Originariamente inviata da KillerWorm Visualizza il messaggio
    O anche:
    codice:
    Gioco1 = {
       run: function() {
         alert('ruuun');
       },
       stop: function(){
       },
       init: function(){
          this.run();
       }
    };
    Gioco1.init()
    Ciao KillerWorm, sto seguendo i vostri consigli per i miei nuovi script tuttavia sono incappato in un problemino che non riesco a risolvere..scrivo subito un esempio

    codice:
    Gioco1 = {
       div: null,
       run: function() {
         alert('ruuun');
       },
    
       create_div: function(){
           //creo un div ...
           //una volta creato gli assegno un listener qualsiasi
           $(this.div).click(function(){
               this.stop(); 
           });
       }  
    
       stop: function(){
       },
       init: function(){
          this.run();
       }
    };
    Gioco1.init()
    nella funzione "create_div" dopo aver creato il div devo assegnargli un listener (ad esempio il pulsante di stop). Il problema è che nel listener il pezzo di funzione non riconosce più l'oggetto "this", o meglio non è più il "Gioco1", come faccio a fargli capire che deve eseguire quella funzione dal listener?

  7. #7
    ps. ho risolto mettendo al posto di "this.stop()" -> "gioco1.stop()", scusate la perdita di tempo

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.