Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2013
    Messaggi
    15

    Core.start(), init(), var, passaggio di parametri

    Un saluto a tutti, premetto che sto lavorando con javascript da meno di tre settimane ma mi sono imbattuto nel seguente problema: come posso passare valori al metodo init() di un mio ipotetico oggetto obj che passerò come argomento?
    Vediamo il primo esempio in cui si crea prima un costruttore e poi si istanzia un oggetto:
    codice:
    function InitTest(saluto) 
    { 
        this.saluto=saluto; 
        this.init=function() 
        { 
           alert(this.saluto); 
        }; 
    } 
    
    var obj = new InitTest("lunga vita e prosperità"); 
    Core.start(obj);
    il risultato, che un poco mi attendevo, è "undefined", questo presumo derivi dal fatto che la funzione init() ( metodo) viene eseguita come "listener" per l'oggetto "window" sull'evento "load" e quindi il "this" di "this.saluto" si riferisce a window.
    Viene confermato dal seguente test:
    codice:
    function InitTest() 
    { 
       this.init=function() 
       { 
          alert(this.toString()); 
        }; 
    } 
    var obj = new InitTest(); 
    Core.start(obj);
    come messaggio otteniamo [object Window] che conferma le aspettative.
    La soluzione trovata usa la dichiarazione con "var" di una variabile privata:

    codice:
    function InitTest(s) 
    { 
       var saluto=s; 
       this.init=function() 
       { 
           alert(saluto); 
        }; 
    } 
    var obj = new InitTest("lunga vita e prosperità"); 
    Core.start(obj);
    il risultato questa volta è il messaggio "lunga vita e prosperità" ma non ho capito perchè funziona, vi ringrazio anticipatamente per il vostro aiuto.

  2. #2
    La risposta te la sei gia data da solo..

    il risultato, che un poco mi attendevo, è "undefined", questo presumo derivi dal fatto che la funzione init() ( metodo) viene eseguita come "listener" per l'oggetto "window" sull'evento "load" e quindi il "this" di "this.saluto" si riferisce a window.
    Viene confermato dal seguente test:
    Questa volta, più che un voto.. è favoreggiamento.

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2013
    Messaggi
    15
    si ma il punto è che non capisco perché dichiarando con var funziona!!?!

    grazie ciao

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    3,660
    ma cos'è quel "Core"? Forse non lo sai, e se lo sai non lo hai specificato, ma quel "Core" non è un comando nativo di javascript, starai sicuramente includendo qualche libreria che probabilmente nessuno o pochi conoscono, per questo non ti risponde nessuno

    Se stai studiando js non è una grande idea andare subito ad utilizzare librerie esterne, studiati js puro...

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2013
    Messaggi
    15
    davo per scontato, colpa mia, che fosse nota mi è stata venduta per una delle prime e basilari.
    Comunque facciamo finta che sia stata definita da me come segue:
    codice:
    Core.start=function(runnuble)
    {
       Core.addEventListener(window, "load", runnable.init);
    }
    
    Core.addEventListener=function(target, type, listener)
    {
       target.addEventListener(type, listener, false);
    }

  6. #6
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    3,660
    si ma il punto è che non capisco perché dichiarando con var funziona!!?!
    funziona anche senza var, stai semplicemente stampando a video una variabile locale...

    function InitTest(s)
    {
    saluto=s;
    this.init=function()
    {
    alert(saluto);
    };
    }
    var obj = new InitTest("lunga vita e prosperità");
    Core.start(obj);
    oppure

    function InitTest(s)
    {
    this.init=function()
    {
    alert(s);
    };
    }
    var obj = new InitTest("lunga vita e prosperità");
    Core.start(obj);

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.