Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1
    Utente di HTML.it L'avatar di Virus_101
    Registrato dal
    Sep 2008
    Messaggi
    2,497

    [X CARLOMARX] Discussione

    ATTENZIONE A TUTTI questo thread e' un proseguo della discussione partita su altro post.

    X CARLOMARX ho avviato il thread separato cosi' possiamo continuare qua a discutere.

    Di certo non chiedo a nessuno di fare come piace fare a me… Cmq:

    1. Dipende da quello che devo fare. Se devo crearmi un singolo effetto animato, lavoro semplicemente su quello, come ho fatto qui: http://forum.html.it/forum/showthre...readid=1497676. Se invece devo modificare massivamente molti dati, come ad esempio molte proprietà del DOM contemporaneamente, mi creo delle librerie apposite ottimizzate per l'occorrenza. E guarda caso spesso mi trovo a lavorare in direzione opposta a come fa jQuery. Ad esempio, proprio per evitare l'abuso degli oggetti che fa jQuery e lo spreco di memoria e di parsing che ne deriva, avevo escogitato questa soluzione (che avevo chiamato "domQuery"): https://developer.mozilla.org/en/Ja...unction#Example
    Ripeto : se hai tempo da buttare via fallo pure. Se posso usare un framework fatto e finito che mi da gia' gli strumenti di cui necessito lo uso. Unitamente al fatto che posso reperire in poco tempo un sacco di plugins gia' fatti e pronti all'uso. In alternativa posso usare anche le mie vecchie libs... o fare qualcosa di nuovo, ma le necessità temporali in azienda hanno la prerogativa su qualsiasi cosa.

    su dom query :: Ma perche' reinvatare la ruota ???? C'e' già ed e' rotonda!!!


    2. Per quanto riguarda l'object oriented, il problema è che fai confusione con lo scoping. Si tratta di due questioni completamente diverse. JavScript è sempre stato un linguaggio object oriented, ma era carente fino a poco tempo fa per quanto riguardava lo scoping. Per questo motivo è stato inventato l'operatore let, che ha egregiamente risolto un bel po' di problemi, soprattutto per quanto riguardava l'abuso del currying:
    Cnfusione con lo scoping ?????????

    Prova te ad accedere dentro un callback a "this" oppure dentro un metodo privato...
    No JS non e' oo e la sua gestione dello scoping ne e' una delle tante dimostrazioni. QUando lo capirai sarà davvero un gran giorno. RIpeto fare nella porzione di codice adibila alle dichiarazioni degli attributi( porzione che in realtà non esiste in quanto posso dichiare attributi dove mi pare nella funzione che mi simula l'oggetto ) this.campo = "atrrPubblico" non e' oop.
    Come appunto anche dover dichiarare var campo = "attrPrivato" sono solo acrocchi che sfruttano la enclosures per gestire qualcosa di simile ad attributi o metodi privati / publlici.

    Mi sa che non hai capito l'esempio che ti ho fatto. Se ho un metodo privato
    var metodoPrivato = function(){}
    e voglio accedere ad uno degli attributi della classe che era un attr pubblico e dichiatato
    this.attrPubb = "campo"
    NON POSSO !!!! Poiche' quella var non ha visibilità nel metodo ma la visibilita che mi manca e' propio quella di this !!!! Quindi un metodo "privato" non ha conoscenza della classe che lo avvia ... FOLLIA !!!! e per evitare cio
    var self = this ; // E DA QUI NON SCAPPI!!!!
    Se non fai cosi' non avrai mai a disposizione il riferimento del "caller" in un metodo privato. E tale riferimento e' proprio la classe stessa.... NON E' OOP! !!!!!

    let non serve a nullla !

    codice:

    <script type="text/javascript;version=1.7">
    var a = 5;
    let (a = 6) {
    a++;
    alert(a); // 7
    }
    alert(a); // 5
    </script>
    Diomio sono arrivati a questo ..... js fa sempre piu' schifo !!!! Ma ti rendi conto di cosa e' questa cosa ???? SI chiamano "pezze" sono istruzioni e in questo caso costrutti che servono a mettere una pezza per aver il codice funzionante.
    Diomioche scifo sta cosa... mi pare di tornare su assembly quando eseguivi il push dei registri per poi fare il pop ..... dopo le sotto procedure....

    Cheschifo ripeto e questa la chiami OOP.... OOP richiede che le abbiano una determinata gestione dello scoping. QUesta cosa che vedo qui ..... => OMG



    Come vedi non si fa uso di funzioni…
    beh mi pare che let .... sia un costrutto del linguaggio ... non capisco il senso di questa affermazione.


    3. Che vuol dire che var a = function () {} non possiede un costruttore??? In js solo gli oggetti speciali null e undefined non posseggono costruttori: in questo caso il costruttore di a è Function:

    codice:

    var a = function () {};
    alert(a.constructor); // Function
    var b = new a.constructor("alert(\"Ciao mondo!\");");
    b(); // "Ciao mondo!"



    Semmai, mi dirai, il vero problema di Function è che è un costruttore non protitizzabile:

    codice:

    function FunzioneSpeciale () {}
    FunzioneSpeciale.prototype = new Function("");
    alert(new FunzioneSpeciale()); // errore
    Devo fare un paio di test a riguardo, resta cmq innamovibile il fatto che non esiste in javascript la seguente dichirazione :

    codice:
    class A 
    {
         public campo1
         private campo2 
    
         public A(  )
         {}
    }
    non solo a livello di sintassi ma a livello concettuale del codice, queste cose si simulano sempre sempre !!! => JS non rispetta OOP.

    Faccio 2-3 test e poi aggiungo le considerazioni, che ho 1 dubbio su una cosa riguardo alla simulazione del costruttore di default in js( simulazione si perche' la struttura std e necessaria per un linguaggio oop non c'e' ! )

    La risposta è sì, c'è un bug.
    Io credo che il vero problema di JavaScript è che è spesso un linguaggio sconosciuto a chi lo usa.
    Sono prefettamente daccordo, il 90% di chi usa js non sa cosa sta usando. Certo. Unitamente al fatto si jquery, la gente pensa poi che jquery sia js... js ha molto oltre jquery. Ma ripeto rimane un linguaggio funzionale. Nulla di quanto potrai dire cambierà le cose. L'utilizzo OOP di js e' solo una emulazione. Js non ha un'identità ben definita come linguaggio ma il suo comportamento, i suoi costrutti etc... lo rendono piu' funzionale che OO .


    Adesso vado, se vuoi apri un thread apposito.
    Eccolo.

    P.S.
    il comunismo e' morto

  2. #2
    Frontend samurai L'avatar di fcaldera
    Registrato dal
    Feb 2003
    Messaggi
    12,924
    per messaggi indirizzati a specifici utenti esistono i messaggi privati, forse avresti potuto aprire la discussione in modo che tutti potessero capire quale fosse la questione e magari avresti potuto avere diversi pareri tecnici
    Vuoi aiutare la riforestazione responsabile?

    Iscriviti a Ecologi e inizia a rimuovere la tua impronta ecologica (30 alberi extra usando il referral)

  3. #3
    Utente di HTML.it L'avatar di Virus_101
    Registrato dal
    Sep 2008
    Messaggi
    2,497
    Come richiesto anche da moderatore e altro utente la discussione e'ì indirizzata a lui.
    I pm non mi piacciono lo spazio e' limitato e faccio fatica a controllarli .

    Cosi' come richiesteo sia da me che da moderatore ho avviato nuovo thread.

    Se ti interessa cmq la discussioe era partita qui : http://forum.html.it/forum/showthrea...8#post13642018

  4. #4
    Utente di HTML.it L'avatar di carlomarx
    Registrato dal
    Oct 2009
    Messaggi
    1,669
    Rispondo al volo qui a quello che scrivi in questo post: http://forum.html.it/forum/showthrea...8#post13643018 Poi quando ho un attimo rispondo nel dettaglio alle questioni che poni qui. Intanto this.privateAttr è un errore: casomai solo privateAttr senza this. Poi, quella di "estendere lo scope" è una cosa inutile in un caso come quello: di solito è una cosa rara, che si fa soltanto quando è impossibile passare il this alla funzione in quanto chiamata in automatico (cosa che di solito succede soprattutto quando si ha a che fare con gli eventi). Lì il problema lo risolvi così:

    codice:
    var a = function () {
           this.publicAttr = "attr pubblico" ;
           var privateAttr = "attr privato" ;
           // var self = this ; (inutile)
    
           this.publicMethod = function () {
                  alert( this.publicAttr );
                  alert( privateAttr ); // ho tolto il this
           }
    
           var privateMethod = function () {
                  alert( this.publicAttr );
                  alert( privateAttr ); // ho tolto il this
           }
    
           this.publicMethod();
           privateMethod.call(this);
    }
    La cosa è molto sensata, perché l'oggetto this non è ereditato staticamente, ma può cambiare da chiamata a chiamata. Io posso chiamare il metodo di un oggetto e applicarlo a un altro oggetto, a quel punto nonostante Metodo sia un metodo dell'oggetto A, erediterà il this dell'oggetto B a cui lo applico:

    codice:
    var oggettoGenerico = {
      "0": "ciao mondo",
      "1": "hello world",
      "length": 2
    }
    
    var arrayVuoto = [];
    
    alert(arrayVuoto.join.call(oggettoGenerico, "|"));
    In questo caso ho cambiato il this di un metodo pubblico dell'oggetto arrayVuoto qual è join() e l'ho applicato a oggettoGenerico, che non lo possiede, ma di conseguenza questo discorso vale anche per le funzioni "private".
    Adesso devo proprio scappare. Risponderò con calma.

  5. #5
    Utente di HTML.it L'avatar di carlomarx
    Registrato dal
    Oct 2009
    Messaggi
    1,669
    Tra l'altro dimenticavo una cosa importante. Dire che JS non possieda le classi in realtà è falso. Semplicemente le classi non possono essere "dichiarate" (in quanto sostituite dai costruttori), ma fanno parte di ciò che eredita un oggetto:

    codice:
    function SpecialObject () { }
    
    var a = new Object(); // creo un oggetto generico vuoto
    var b = new SpecialObject(); // creo un oggetto "speciale" (si fa per dire, perche' e' vuoto esattamente come un oggetto generico)
    
    alert(a instanceof Object); // true
    alert(a instanceof SpecialObject); // false
    alert(b instanceof Object); // true
    alert(b instanceof SpecialObject); // true
    Gli oggetti hanno "memoria" delle loro origini. Si tratta del concetto di classe a tutti gli effetti, estendibile a molti livelli di "eredità"…

  6. #6
    Utente di HTML.it L'avatar di Virus_101
    Registrato dal
    Sep 2008
    Messaggi
    2,497
    Originariamente inviato da carlomarx
    Rispondo al volo qui a quello che scrivi in questo post: http://forum.html.it/forum/showthrea...8#post13643018 Poi quando ho un attimo rispondo nel dettaglio alle questioni che poni qui. Intanto this.privateAttr è un errore: casomai solo privateAttr senza this. Poi, quella di "estendere lo scope" è una cosa inutile in un caso come quello: di solito è una cosa rara, che si fa soltanto quando è impossibile passare il this alla funzione in quanto chiamata in automatico (cosa che di solito succede soprattutto quando si ha a che fare con gli eventi). Lì il problema lo risolvi così:

    codice:
    var a = function () {
           this.publicAttr = "attr pubblico" ;
           var privateAttr = "attr privato" ;
           // var self = this ; (inutile)
    
           this.publicMethod = function () {
                  alert( this.publicAttr );
                  alert( privateAttr ); // ho tolto il this
           }
    
           var privateMethod = function () {
                  alert( this.publicAttr );
                  alert( privateAttr ); // ho tolto il this
           }
    
           this.publicMethod();
           privateMethod.call(this);
    }
    INUTILE ?????? MA STAI SCHERZANDO ???????

    Vedi come alla fine mi dai costantemente ragione !!!
    JAVASCRIPT NON E' OOP !!!! non hai gestione private public e l0utilizzo di this e var per emulare lo scoping pubblico/privato si FA ESISTE ED E' UNA TECNICA USATA!!!!
    E ripeto dimmi come fai ad usare il riferimento a this in un metodo pseudoprivato .... a volte servono e devi farli... e come accedi a this se non usi l'istruzione che tu ritieni tanto inutile ??????????
    Sopra non hai risolto nulla hai solo cambiato lo scoping degli attributi. ! E grazie che se cambi lo scoping funiona !!! E' come dire devo fare una torta con la farina, ma ho solo il grano elo macino per avere la farina. Mentre tu mi dai una soluzione non macinare il grano usa la sabbia !

    Ma per favore !

    Originariamente inviato da carlomarx
    La cosa è molto sensata, perché l'oggetto this non è ereditato staticamente, ma può cambiare da chiamata a chiamata. Io posso chiamare il metodo di un oggetto e applicarlo a un altro oggetto, a quel punto nonostante Metodo sia un metodo dell'oggetto A, erediterà il this dell'oggetto B a cui lo applico:

    codice:
    var oggettoGenerico = {
      "0": "ciao mondo",
      "1": "hello world",
      "length": 2
    }
    
    var arrayVuoto = [];
    
    alert(arrayVuoto.join.call(oggettoGenerico, "|"));
    QUesto e' tutto lambda calcolo => LINGUAGGIO FUNZIONALE !! E ma guarda un po' se non e' un notazione json ..... quella che tanto aborri e che jquery usa ovunque... e che e' una sintatti davvero comoda per fare strutture dati al volo.


    Originariamente inviato da carlomarx
    In questo caso ho cambiato il this di un metodo pubblico dell'oggetto arrayVuoto qual è join() e l'ho applicato a oggettoGenerico, che non lo possiede, ma di conseguenza questo discorso vale anche per le funzioni "private".
    Adesso devo proprio scappare. Risponderò con calma.
    Le funzioni private NON ESISTONO ! Non c'e' nulla di questotipo in javascript. Sono solo simulazioni del comportamento dello scoping. Poiche js non e' un linguaggio ad oggetti!!!
    Ogni cosa che dici lo conferma, e ogni tuo tentativo di negare questa evidenza non fa altro che rafforzare quanto dico.

  7. #7
    Utente di HTML.it L'avatar di Virus_101
    Registrato dal
    Sep 2008
    Messaggi
    2,497
    Originariamente inviato da carlomarx
    Tra l'altro dimenticavo una cosa importante. Dire che JS non possieda le classi in realtà è falso. Semplicemente le classi non possono essere "dichiarate" (in quanto sostituite dai costruttori), ma fanno parte di ciò che eredita un oggetto:

    codice:
    function SpecialObject () { }
    
    var a = new Object(); // creo un oggetto generico vuoto
    var b = new SpecialObject(); // creo un oggetto "speciale" (si fa per dire, perche' e' vuoto esattamente come un oggetto generico)
    
    alert(a instanceof Object); // true
    alert(a instanceof SpecialObject); // false
    alert(b instanceof Object); // true
    alert(b instanceof SpecialObject); // true
    Gli oggetti hanno "memoria" delle loro origini. Si tratta del concetto di classe a tutti gli effetti, estendibile a molti livelli di "eredità"…
    e aridagje .... sono solo nomi che decidi te !!!!!!
    chiamare una funzione oggetto non cabia la natura di una funziona non credi ?
    Resta una funzione che chiami oggetto. E' come definire i dossi stradali "arredo urbano" --- non e' che non sono piu' dossi perche' li chiami in modo diverso.. E ripeto sono solo acrocchi fatti per portare un linguaggio non OOP a poter aver qualche parvenza di OOP.

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

    un classico che è servito da base a molti flame
    Without faith, nothing is possible. With it, nothing is impossible
    http://ilwebdifabio.it

  9. #9
    Utente di HTML.it L'avatar di Virus_101
    Registrato dal
    Sep 2008
    Messaggi
    2,497
    Ripeto puoi chiamare la mer*a cioccolata... ma sempre mer*a rimane, puzza e fa schifo e non credo tu la voglia mangiare.

    EDIT : mi sono guardato la pillola e nonostante ci siano alcuni punti discutibili, l'unica soluzione sensata e' non definire js come linguaggio OOP !!!
    E cio viene ulteriormente confermato dalla pillola stessa e le conclusioni tratte sono errate!
    js non e' OO e' tutto lambda calcolo e piu' vicino ad un linguaggio funzionale.

    Parliamo di ereditarieta, scoping, incapsulamento , polimorfismo etc... che sono i must di un linguaggio OO ... e che js tenta malamente di simulare con acrocchi inguardabili.

  10. #10
    Utente di HTML.it L'avatar di carlomarx
    Registrato dal
    Oct 2009
    Messaggi
    1,669
    Cheppalle, mi dispiace che ho sempre poco tempo... devo mettermici di buzzo buono, perché parli di capre e cavoli. Dimenticavo di dirti prima che non dovresti mai usare la parola self per salvarti l'oggetto this, perché è una parola nativa riservata di JS:

    codice:
    var a = "ciao"
    
    function funzione () {
      var a = "mondo";
      alert(a); // mondo
      alert(self.a); // ciao
    }
    
    funzione();
    Facendo come fai tu la sovrascrivi. Usa pizza, lavastoviglie, ma non "self"

    Piccola provocazione. Ma ti rendi conto che se fosse un linguaggio funzionale non avrebbe neppure operatori come new e instanceof e oggetti come this??? Ripeto, è giusto che this sia "volatile", perché NON FA PARTE DEL CORPO DELLA FUNZIONE, MA PIUTTOSTO DELLA SUA CHIAMATA:

    codice:
    <input type="button" value="Cliccami" id="bottone" />
    <script type="text/javascript">
    function MioOggetto () {
      this.id = "Ciao mondo";
      this.metodoPubblico = function () {
        alert(this.id); // "bottone", non "Ciao mondo"!!
      };
    }
    
    var nuovoOggetto = new MioOggetto();
    
    document.getElementById("bottone").onclick = nuovoOggetto.metodoPubblico;
    </script>

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.