![]() | |
![]() |
| | Thread Tools | Display Modes |
#11
| ||||||||
| ||||||||
|
|
Ma guarda, sono un po' come quelli che partecipano ai reality, non sanno fare un caxxo e poi fanno TV (con il malumore degli adetti ai lavori) Io, un giorno non troppo lontano ho scoperto l'informatica e da quasi autodidatta mi sono inventato un lavoro e poi un altro e non ho ancora capito come faccio ancora sd andare avanti... Perfetto, ti seguo su questa metafora: Nel momento in cui i partecipanti ai reality fanno TV, arriva un punto in cui [cut] |

|
E' del tutto normale che s'inizi come te: di certo, quando ho studiato io, il "web" non lo insegnavano. E neppure i Design Pattern. In questo campo, qui dentro, credo che gli autodidatti spopolino. ![]() |
Con la "manutenibilità" che si rivolta metaforicamente nella tomba. ![]() |

|
in effetti, ma più che altro, volevo evitare che si vedesse l'inizializzazione ![]() .. Mi hai appena fatto cascare le braccia, lo sai vero? ![]() |
|
, ma non la stai neppure dichiarando! io pensavo di sì No, non la stai dichiarando. Una dichiarazione senza inizializzazione, sarebbe: var xmlhttp; function ... Mentre tu la usi direttamente, senza dichiararla. Il parser la vede, e dice "che roba è questa? E' una variabile locale? No, non la vedo. Bòn sarà una proprietà dell'oggetto globale" e va ad impostarla in window, nel nostro caso, implicitamente. Tant'è che una variabile globale così fatta, è leggermente differente, da una dichiarata tramite var, comportandosi esattamente come se fosse una proprietà dell'oggetto. |
|
Lo usi l'ICEBrowser? eccerto ![]() Credo tu sia il primo che abbia mai incontrato. ![]() |

|
Ni. Devi ragionare in termini di OOP, non di "funzioni" procedurali. |
|
I Design Pattern (e quindi il Singleton) si applicano alla OOP. Sarebbe bello/interessante che mi potessi fare un'esempio Google it's your friend: http://www.google.it/search?q=singleton+javascript |
#12
| |||
| |||
|
|
this, ho capito che in questo modo si è un po' simulato il concetto di variabile privata e pubblica. |
#13
| |||||||||||||||||
| |||||||||||||||||
|
|
E' del tutto normale che s'inizi come te: di certo, quando ho studiato io, il "web" non lo insegnavano. E neppure i Design Pattern. In questo campo, qui dentro, credo che gli autodidatti spopolino. ![]() sì, il problema mio, come forse si è intuito, è che mancano delle conoscenze (parecchie) sui metodi progettuali |
|
, ma non la stai neppure dichiarando! io pensavo di sì No, non la stai dichiarando. Una dichiarazione senza inizializzazione, sarebbe: var xmlhttp; function ... Mentre tu la usi direttamente, senza dichiararla. Il parser la vede, e dice "che roba è questa? E' una variabile locale? No, non la vedo. Bòn sarà una proprietà dell'oggetto globale" e va ad impostarla in window, nel nostro caso, implicitamente. Tant'è che una variabile globale così fatta, è leggermente differente, da una dichiarata tramite var, comportandosi esattamente come se fosse una proprietà dell'oggetto. cavolo, io pensavo che una variabile globale venisse messa in una proprietà omonima nell'oggetto window |
|
Lo usi l'ICEBrowser? eccerto ![]() Credo tu sia il primo che abbia mai incontrato. ![]() No, stavo scherzando, manco so' di che browser stai parlando ![]() |
|
Ni. Devi ragionare in termini di OOP, non di "funzioni" procedurali. e appunto, questo è uno dei miei problemi |
|
bene tra i miei mille casini sono andato a spulciare qualche link... |
|
e sono subito rimasto folgorato facendo scoperte nuove, ok, io ho trovato questo: |
|
dal quale ho fatto la scoperta incredibile che all'interno di una funzione si possono richiamare le variabili nel proprio interno usando il riferimento della funzione stessa, |
|
io pensavo si potesse fare solo con this, |
|
ho capito che in questo modo si è un po' simulato il concetto di variabile privata e pubblica. |
|
Al chè ho voluto subito fare un mio singleton (di cui ne esisteranno 10000) |

|
un po' più generico di quello dell'esempio del link, e questo è quello che ho prodotto: function Singleton( objectName ) { if( typeof Singleton[objectName] == 'undefined' ) eval( "Singleton['"+objectName+"'] = "+objectName+"( );" ); return Singleton[objectName]; } |
|
però non mi fa impazzire perchè ho usato eval, ma mi sembra che funzioni e che sia generico, |
|
if( xmlhttp.status == 200 ) callback( xmlhttp.responseText ); else alert( "Error; status = " + xmlhttp.status ); |
|
A proposito, io pensavo felicemente che una funzione così, potesse andare bene, |
|
ma mi sono accorto che FF si incaxxa di brutto se cerco di fare più richieste ravvicinate , |
|
cioè se l'ultima richiesta non è conclusa, mi va in errore a differenza di IE che ignora la precedente e cosidera solo l'ultima (comportamento che pensavo avrebbe avuto anche FF) |

|
come posso fare? |
#14
| |||
| |||
|
|
this, ho capito che in questo modo si è un po' simulato il concetto di variabile privata e pubblica. Anzi non è coretto, forse è meglio dire: statica e privata... |
#15
| ||||||||||||||||||
| ||||||||||||||||||
|
|
Sono lacune che si possono colmare anche in corso d'opera, ovvero nel mentre stai sviluppando. |
|
bene tra i miei mille casini sono andato a spulciare qualche link... Dovresti sempre trovare il tempo per farlo. Come vedi, è tempo che si ripaga abbondantemente da sé. |

|
e sono subito rimasto folgorato facendo scoperte nuove, ok, io ho trovato questo: L'idea viene più o meno resa, ma ci sono sicuramente esempi migliori, a giro. Decisamente migliori. |
|
dal quale ho fatto la scoperta incredibile che all'interno di una funzione si possono richiamare le variabili nel proprio interno usando il riferimento della funzione stessa, Vediamo di fare un po' di chiarezza. Non c'è niente di "incredibile": un costruttore è una funzione ed è un oggetto allo stesso tempo. Quello che viene fatto in quel codice, non è altro che aggiungere una proprietà all'oggetto "Singleton". E fin qui non c'è nulla di strano, no? |
|
L'hai già fatto sicuramente altre volte di aggiungere una in modo dinamico una proprietà ad un oggetto: var MyObj = {}; MyObj.myprop = "123"; |
|
E' la stessa identica cosa. |
|
Per quanto riguarda invece il "riferimento alla funzione stessa", non dovrebbe colpirti in modo particolare. Javascript non è compilato [cut...] |
|
Al chè ho voluto subito fare un mio singleton (di cui ne esisteranno 10000) E ti consiglio, prima di metterti a inventare nuovamente la ruota, di capire almeno di che forma è fatta una ruota e come funziona. ![]() |
|
un po' più generico di quello dell'esempio del link, e questo è quello che ho prodotto: function Singleton( objectName ) { if( typeof Singleton[objectName] == 'undefined' ) eval( "Singleton['"+objectName+"'] = "+objectName+"( );" ); return Singleton[objectName]; } Dunque. In primis, questo *non* è un Singleton. |
|
Inoltre, hai di nuovo ragionato in termini procedurali e non a oggetti. |
|
però non mi fa impazzire perchè ho usato eval, ma mi sembra che funzioni e che sia generico, Un Singleton è un pattern, è già generico di suo. Deve essere usato e implementato in un oggetto. Tu l'hai distorto in una funzione. |
)|
Questo link dovrebbe aiutarti ulteriormente: http://it.wikipedia.org/wiki/Singleton |
|
A proposito, io pensavo felicemente che una funzione così, potesse andare bene, Evita la closure, se puoi, oppure cerca di farla un poco meglio. |
|
ma mi sono accorto che FF si incaxxa di brutto se cerco di fare più richieste ravvicinate , "S'incaxxa di brutto" è un sinonimo di "non funziona".. e sai che non vuol dire poi molto. |
|
Sono sicuro che se ti vai a leggere l'errore capisci da solo cosa non va. |
|
E se ben ricordo ne abbiamo già discusso in questo newsgroup. |
|
cioè se l'ultima richiesta non è conclusa, mi va in errore a differenza di IE che ignora la precedente e cosidera solo l'ultima (comportamento che pensavo avrebbe avuto anche FF) Capisci cosa intendevo dire, quando ti ho scritto di non "supportare" browser che non usi o non sei disposto a testare? ![]() |
|
come posso fare? Gestire l'interruzione di richieste in corso, cosa che al momento non fai. |
#16
| |||||||||||
| |||||||||||
|
|
dal quale ho fatto la scoperta incredibile che all'interno di una funzione si possono richiamare le variabili nel proprio interno usando il riferimento della funzione stessa, Vediamo di fare un po' di chiarezza. Non c'è niente di "incredibile": un costruttore è una funzione ed è un oggetto allo stesso tempo. Quello che viene fatto in quel codice, non è altro che aggiungere una proprietà all'oggetto "Singleton". E fin qui non c'è nulla di strano, no? ni |
|
L'hai già fatto sicuramente altre volte di aggiungere una in modo dinamico una proprietà ad un oggetto: var MyObj = {}; MyObj.myprop = "123"; ma qui lo sto facendo con un'istanza |
|
E' la stessa identica cosa. a ecco |
|
Al chè ho voluto subito fare un mio singleton (di cui ne esisteranno 10000) E ti consiglio, prima di metterti a inventare nuovamente la ruota, di capire almeno di che forma è fatta una ruota e come funziona. ![]() mah, diciamo che a me serviva uno strumento che mi facesse un'inizializzazione lazy, |
|
che ho erroneamente chiamato singleton |
|
Inoltre, hai di nuovo ragionato in termini procedurali e non a oggetti. e già e avrò dei problemi, per chissa' quanto... |
|
Un Singleton è un pattern, è già generico di suo. Deve essere usato e implementato in un oggetto. Tu l'hai distorto in una funzione. sono stato bravo ) |
|
Questo link dovrebbe aiutarti ulteriormente: http://it.wikipedia.org/wiki/Singleton ok, allora ho prodotto questo: |
|
Evita la closure, se puoi, oppure cerca di farla un poco meglio. ci ho provato, ma in vano... |
|
poi ho provato a sostituire la chiusura con this, però ora sono in delirio è non riesco a capire perchè non si riferisca all'oggetto... |
|
come posso fare? Gestire l'interruzione di richieste in corso, cosa che al momento non fai. Mmmm, mi dai un'idea? |
Se nonostante questo ti sfugge il
#17
| |||||||||||
| |||||||||||
|
|
ni "ni"? Dove vedi la "stranezza", scusa? L'hai già fatto sicuramente altre volte di aggiungere una in modo dinamico una proprietà ad un oggetto: var MyObj = {}; MyObj.myprop = "123"; ma qui lo sto facendo con un'istanza Scusa, eh, ma qui non lo fai comunque con un'istanza? function MyFun(){}; MyFun.myprop = "123"; |
|
E' la stessa identica cosa. a ecco Non dire "a ecco" se continui ad avere dei dubbi. Aaah, ancora non ci siamo! |

|
Il Singleton è un Design Pattern che si applica alla OOP, e qui di OOP non ne vedo traccia, c'è unicamente una funzione. |
|
Riguardati il link che ti ho postato sul Singleton e dimmi se c'è qualcosa che vagamente somiglia a quello che hai scritto. |
|
Evita la closure, se puoi, oppure cerca di farla un poco meglio. ci ho provato, ma in vano... Se utilizzi il pattern Singleton puoi anche farne a meno, laddove non hai diverse istanze dell'oggetto XmlHttpRequest. |
|
poi ho provato a sostituire la chiusura con this, però ora sono in delirio è non riesco a capire perchè non si riferisca all'oggetto... L'onreadystatechange è un evento decontestualizzato, è per questo che il "this" non si riferisce all'istanza dell'oggetto XHR. |
|
come posso fare? Gestire l'interruzione di richieste in corso, cosa che al momento non fai. Mmmm, mi dai un'idea? Cercare su Google ti dovrebbe già fornire parecchie informazioni, ma anche un *minimo* di debugging sul tuo codice, ti dovrebbe già chiarire cos'è che va in errore e perché, |
|
e quindi come evitarlo. |
|
Verifica la riga che Firefox ti segnala. Metti un alert. Almeno i fondamentali, vedi di farli. ![]() |
|
Se nonostante questo ti sfugge il nocciolo della questione ne riparliamo. |
|
Gli approcci in tal senso possono essere diversi. E ne avevamo già discusso in questo NG, ripeto, almeno una volta. |
#18
| |||||||||||
| |||||||||||
|
|
L'hai già fatto sicuramente altre volte di aggiungere una in modo dinamico una proprietà ad un oggetto: var MyObj = {}; MyObj.myprop = "123"; ma qui lo sto facendo con un'istanza Scusa, eh, ma qui non lo fai comunque con un'istanza? function MyFun(){}; MyFun.myprop = "123"; O_O ignoravo che si potesse fare questa cosa |
Se anche tu l'avessi ignorato fin'ora, non te|
Aaah, ancora non ci siamo! eh, ci avrei giocato le palle ![]() |

|
Cercare su Google ti dovrebbe già fornire parecchie informazioni, ma anche un *minimo* di debugging sul tuo codice, ti dovrebbe già chiarire cos'è che va in errore e perché, mah, un'idea me l'ero fatta e l'avevo minimamente espressa |
|
e quindi come evitarlo. eh ma sono sempre dietro a reiventare le ruote pero'... :P |

|
Verifica la riga che Firefox ti segnala. Metti un alert. Almeno i fondamentali, vedi di farli. ![]() a dire il vero l'avevo fatto |
|
Se nonostante questo ti sfugge il nocciolo della questione ne riparliamo. ho tratto queste mie conclusioni: |
|
l'ogettino xhr sta "lavorando" e non vorebbe essere disturbato, non riesce a fare 2 lavori alla volta diciamo... |

|
dove devi perdonarmi l'approccio non oop, |

|
dell'oggetto xhr a meno che non venga forzato a crearne una nuova (passando un parametro a 1) e passare da quell'istante la "nuova"... |
|
ah, già che c'ero ho evitato la chiusura sull'oggetto xhr, ma non ho potuto fare nienete per il riferimento della funzione, che pero' essendo appunto il riferimento di una funzione, forse non genera una chiusura, boh... |
|
mi sono salvato un link che forse potrebbe essere la volta di cui parli, appena posso domani ci darò un'occhiata Ciao e grazie |
#19
| |||
| |||
|
|
e quindi come evitarlo. eh ma sono sempre dietro a reiventare le ruote pero'... :P Qui il discorso è diverso: ancora alla ruota non ci sei arrivato, stai cercando di comprendere appieno la necessità che poi ti porterà forse, a reinventare la ruota. ![]() |

|
Verifica la riga che Firefox ti segnala. Metti un alert. Almeno i fondamentali, vedi di farli. ![]() a dire il vero l'avevo fatto Se l'hai fatto, dove sono i risultati? |


#20
| |||||
| |||||
|
|
Verifica la riga che Firefox ti segnala. Metti un alert. Almeno i fondamentali, vedi di farli. ![]() a dire il vero l'avevo fatto Se l'hai fatto, dove sono i risultati? allora i risultati sono i seguenti, in effetti dopo uno studio un po' più approfondito della cosa e dopo avergli messo alert avvunque (evitiamo volgarità ![]() Chissa' quante cose mi correggerai :| |
|
per FF gli stati intermedi allo 0 (uninitialized) e al 4 (complete) sono sacri, cioè tentativi di leggere lo status, rispedire header di un nuovo messaggio e/o sperirlo proprio, lo fanno andare in errore |
|
ma il bello deve ancora venire, se si lancia l'abort() l'oggetto va in readyState = 4 (il chè potrebbe avere anche senso) pero' sollevando un'eccezione meravigliosa |
|
terminata "normalmente", infatti la proprietà status in questo caso non è accessibile similmente agli stati intermedi di cui si parlava prima |

|
ciao aspetto le tue correzioni ![]() fiducioso che tu mi dia anche 2 righe di codice :P |
![]() |
| Thread Tools | |
| Display Modes | |
| |