Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it L'avatar di nourdine
    Registrato dal
    Nov 2005
    Messaggi
    1,130

    refactoring di metodo a prima vista inutile

    ciao

    ho un pezzo di codice da revisionare. Ecco i 2 snippet (il secondo e' la versione che io ho proposto come revisione della prima):

    codice:
    <script type="text/javascript">
    
    var O1 = (function(){
    
    	var self;
    	
    	return {
    		ua: navigator.userAgent,
    		ff: false,
    		ff3: false,
    		ff3up: false,	  
    		init: function () {
    			self = O1;
    			if (self.ua.indexOf("Firefox") > -1) {
    				self.ff = true;
    				var re = /Firefox\/([^.]*)\./;
    				var matches = re.exec(self.ua);
    				if (matches.length == 2) {
    					var version = +matches[1];
    					self.ff3 = (version == 3);
    					self.ff3up = (version >= 3);
    				}
    			}	  
    		}	
    	}
    })()
    O1.init();
    document.write("firefox = " + O1.ff + "
    ")
    document.write("firefox3 = " + O1.ff3 + "
    ")
    document.write("firefox3up = " + O1.ff3up + "
    ")
    
    </script>
    
    <hr />
    
    <script type="text/javascript">
    
    var O2 = {
    		ua: navigator.userAgent,
    		ff: false,
    		ff3: false,
    		ff3up: false,	  
    		init: function () {
    			if (this.ua.indexOf("Firefox") > -1) {
    				this.ff = true;
    				var re = /Firefox\/([^.]*)\./;
    				var matches = re.exec(this.ua);
    				if (matches.length == 2) {
    					var version = +matches[1];
    					this.ff3 = (version == 3);
    					this.ff3up = (version >= 3);
    				}
    			}	  
    		}	
    	}
    O2.init();
    document.write("firefox = " + O2.ff + "
    ")
    document.write("firefox3 = " + O2.ff3 + "
    ")
    document.write("firefox3up = " + O2.ff3up + "
    ")
    
    </script>
    il mio collega non si ricorda perche ha concepito il metodo in quel modo (usando la variabile private self creata con un module pattern) pero' dice che si ricorda che una buona ragione cera ;-)

    secondo me e' inutile e basta.

    che voi sappiate ci sono browser che hanno problemi a interpretare la seconda versione che io ho proposto? a me sembra + semplice e non fa nemmeno uso della chiusura.

    grazie

  2. #2

    Re: refactoring di metodo a prima vista inutile

    Originariamente inviato da nourdine
    che voi sappiate ci sono browser che hanno problemi a interpretare la seconda versione che io ho proposto?
    grazie
    Credo di no.

  3. #3
    Utente di HTML.it L'avatar di nourdine
    Registrato dal
    Nov 2005
    Messaggi
    1,130
    grazie baz ... adesso provo a convincere il mio collega che ha scritto una minchionata pazzesca

    in realta' e' il mio capo quindi mi ci diverto il doppio

  4. #4
    Originariamente inviato da nourdine
    grazie baz ... adesso provo a convincere il mio collega che ha scritto una minchionata pazzesca

    in realta' e' il mio capo quindi mi ci diverto il doppio
    Beh, una minchiata mi pare esagerato...funziona il suo metodo quanto il tuo.
    Fai te, io non mi assumo nessuna responsabilità

  5. #5
    Utente di HTML.it L'avatar di nourdine
    Registrato dal
    Nov 2005
    Messaggi
    1,130
    si si dicevo per scherzare ... comunque la sua e' parzialmente inutile ce poco da fare ;-(

  6. #6
    Originariamente inviato da nourdine
    si si dicevo per scherzare ... comunque la sua e' parzialmente inutile ce poco da fare ;-(
    Sembra anche a me.
    Può essere che il tuo capo ne sappia meno di te riguardo al javascript.
    Tuttavia io stessom che non sono un fenomeno, se riguardo del codice scritto mesi fa, me ne vergogno VVoVe: e penso che sia un problema di molti .

  7. #7

    Re: refactoring di metodo a prima vista inutile

    Originariamente inviato da nourdine
    ciao

    ho un pezzo di codice da revisionare. Ecco i 2 snippet (il secondo e' la versione che io ho proposto come revisione della prima):

    codice:
    <script type="text/javascript">
    
    var O1 = (function(){
    
    	var self;
    	
    	return {
    		ua: navigator.userAgent,
    		ff: false,
    		ff3: false,
    		ff3up: false,	  
    		init: function () {
    			self = O1;
    			if (self.ua.indexOf("Firefox") > -1) {
    				self.ff = true;
    				var re = /Firefox\/([^.]*)\./;
    				var matches = re.exec(self.ua);
    				if (matches.length == 2) {
    					var version = +matches[1];
    					self.ff3 = (version == 3);
    					self.ff3up = (version >= 3);
    				}
    			}	  
    		}	
    	}
    })()
    O1.init();
    document.write("firefox = " + O1.ff + "
    ")
    document.write("firefox3 = " + O1.ff3 + "
    ")
    document.write("firefox3up = " + O1.ff3up + "
    ")
    
    </script>
    
    <hr />
    
    <script type="text/javascript">
    
    var O2 = {
    		ua: navigator.userAgent,
    		ff: false,
    		ff3: false,
    		ff3up: false,	  
    		init: function () {
    			if (this.ua.indexOf("Firefox") > -1) {
    				this.ff = true;
    				var re = /Firefox\/([^.]*)\./;
    				var matches = re.exec(this.ua);
    				if (matches.length == 2) {
    					var version = +matches[1];
    					this.ff3 = (version == 3);
    					this.ff3up = (version >= 3);
    				}
    			}	  
    		}	
    	}
    O2.init();
    document.write("firefox = " + O2.ff + "
    ")
    document.write("firefox3 = " + O2.ff3 + "
    ")
    document.write("firefox3up = " + O2.ff3up + "
    ")
    
    </script>
    il mio collega non si ricorda perche ha concepito il metodo in quel modo (usando la variabile private self creata con un module pattern) pero' dice che si ricorda che una buona ragione cera ;-)

    secondo me e' inutile e basta.

    che voi sappiate ci sono browser che hanno problemi a interpretare la seconda versione che io ho proposto? a me sembra + semplice e non fa nemmeno uso della chiusura.

    grazie
    L'unica cosa che mi viene in mente
    contrario al tuo metodo
    http://alistapart.com/articles/getoutbindingsituations

    mi coccolerei il capo





    Ps.
    Adesso che ci penso basterebbe
    togliere il this al tuo metodo e mettere
    O2

    jQuery fa una cosa del genere

    Codice PHP:
    var userAgent navigator.userAgent.toLowerCase();

    // Figure out what browser is being used
    jQuery.browser = {
        
    version: (userAgent.match( /.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/ ) || [])[1],
        
    safari: /webkit/.testuserAgent ),
        
    opera: /opera/.testuserAgent ),
        
    msie: /msie/.testuserAgent ) && !/opera/.testuserAgent ),
        
    mozilla: /mozilla/.testuserAgent ) && !/(compatible|webkit)/.testuserAgent )
    }; 
    Without faith, nothing is possible. With it, nothing is impossible
    http://ilwebdifabio.it

  8. #8
    Codice PHP:
    self O1
    Questa secondo me è una bella scorciatoia.
    Metti di avere un oggetto chiamato
    myObjFaiQualcosa con self ti risparmi
    un bel po di tasti

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

  9. #9
    Utente di HTML.it L'avatar di nourdine
    Registrato dal
    Nov 2005
    Messaggi
    1,130
    il problema del binding e' un problema solo se usi i metodi di un oggetto in modi "strani" (vedi l'articolo su alistapart). nel mio caso l'oggetto ha una serie di variabili settate a false rappresentanti i vari browser.

    poi il metodo init risetta 1 di queste variabili a true in relazione al browser che esegue lo script e ti lascia un oggetto contenente informazioni sul browser in causa. Insomma e' un oggetto che fa sniffing del browser. dopo init e' qualche cosa del genere:

    O = {
    ie: false,
    opera: false,
    firefox: true,
    safari: false
    }

    una volta eseguito, quel metodo non viene + chiamato. quindi nn ci si trova mai in situazioni di binding loss.

    insomma il mio capo ha torto e sono pronto per il refactoring!!! ;-)

  10. #10
    il problema del binding e' un problema solo se usi i metodi di un oggetto in modi "strani" (vedi l'articolo su alistapart).
    You never know.
    Metterei un toLowerCase all'user agent
    my 5 cents


    Without faith, nothing is possible. With it, nothing is impossible
    http://ilwebdifabio.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 © 2025 vBulletin Solutions, Inc. All rights reserved.