Pagina 3 di 7 primaprima 1 2 3 4 5 ... ultimoultimo
Visualizzazione dei risultati da 21 a 30 su 64
  1. #21
    attenzione che Base emula ereditarietà, non estende un tubo se non trattando tutto come oggetti e non come classi.

    Classe.prototype = new AltraClasse
    e
    Classe.prototype.metodo = funzione

    non sono implementati in Base quindi direi che .... si, crea solo confusione e personalmente non ritengo base indispesanbile, visto che Dean come altri credo sia convinto che scrivere classi senza usare oggetti non sia un modo corretto, mentre permette di avere codice spesso molto più pulito, vedi il mi oultimo esempio della pillola ....insomma, usare se necessario Base dopo aver capito e non "a vanvera"
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  2. #22
    Ciao andr3a, ho approfondito il discorso di Base, e ho visto che alla fine non è indispensabile. Infatti penso di continuare nell'uso tradizionale di {} e/o di prototype. Giusto ora ho letto il tuo post che conferma quanto avevo dedotto.

    Personalmente con codice "pulito" intendo anche che sia poco voluminoso... inutile avere definizioni di classi a mai finire se poi non vengono utilizzate!

    Ultimamente mi sto sbizzarrendo con la YUI e la YAHOO.ext, ma anche in questo caso tendo ad includere solo lo stretto indispensabile.

    In ogni caso è bene essere a conoscenza di queste e altre librerie che possono agevolare non poco nella scrittura di nuovo codice, anche se talvolta si rischia veramente di fare confusione e di andare OT

  3. #23
    giusto, però è anche bene non confondere frameworks con metodi di basso livello.

    Scriptaculous, MooTools, YUI e nel suo piccolo anche bytefx sono frameworks (API dedicata per fare qualcosa), Prototype, Base o altro non sono frameworks ma uno stravolgimento (in senso buono) del JavaScript in basso livello, ovvero permettono a chi non sa niente del linguaggio di fare qualcosa di "teoricamente complicato" in modo semplice.

    Dal mio punto di vista è sempre meglio conoscere a fondo il linguaggio al fine di avere la possibilità di valutare cosa, tra le varie librerie o frameworks, sia veramente utile o degno di nota e cosa no, come hai fatto tu nel tuo caso
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  4. #24
    mi son riletto il pistolozzo scritto da me medesimo ... allora, nel frattempo ho giocato molto con eredità multiple, superCostruttori, altro ancora ... molto lo riscriverei spiegando meglio pro e contro, ma sul discorso dell'intero costruttore in prototype mi spiace, ma avevo scritto un vero sfrondone.

    Non ha senso, per le closure, mettere tutto in prototype, poichè i metodi privilegiati, quelli scritti come this.metodo = function(){} all'interno del costruttore, verranno comunque dichiarati per ogni istanza.

    Scusate la precedente e sciagurata spiegazione, spero di aver recuperato un pò.

    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  5. #25
    Utente di HTML.it L'avatar di Linusss
    Registrato dal
    Sep 2002
    Messaggi
    405
    Ma è normale che con l'ereditarietà prototipale le propietà e i metodi private della classe dalla quale si va ad eriditare siano poi in comune fra tutti gli oggetti della classe derivata?
    Mi spiego:
    codice:
    	function Test() {
    		var saluto=null;
    		this.saluta = function() {
    			alert("Ciao");
    		};
    		this.salutaTest = function() {
    			alert("Ciao Test");
    		};
    	};
    	function SubTest(){
    		this.saluta = function() {
    			alert(saluto);
    		};
    		this.setSaluto=function(s){
    			saluto=s;
    		}
    	};
    	
    	SubTest.prototype = new Test;
    	
    	
    	var subtest1 = new SubTest();
    	var subtest2=new SubTest();
    	subtest1.setSaluto("Ciao test1");
    	subtest1.saluta();	// Ciao test1
    	subtest2.saluta();	// Ciao test1
    Come mai si comporta così?
    Forum Additive monitora le discussioni più importanti!

  6. #26
    La variabile saluto che setti in SubTest non ha niente a che vedere con la variabile saluto in Test ( era questo che volevi sapere? :master: )
    Tra l'altro attento, nel metodo setSaluto stai settando la variabile saluto come globale.

  7. #27
    infatti l'abc sono le closures ... ma non vuole rassegnarsi
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  8. #28
    Utente di HTML.it L'avatar di Linusss
    Registrato dal
    Sep 2002
    Messaggi
    405
    Originariamente inviato da Mega69
    La variabile saluto che setti in SubTest non ha niente a che vedere con la variabile saluto in Test ( era questo che volevi sapere? :master: )
    Tra l'altro attento, nel metodo setSaluto stai settando la variabile saluto come globale.
    Hai ragione così è globale mi sono sbagliato io, però:
    codice:
     	var saluto="saluto globale";
    	function Test() {
    		var saluto=null;
    		this.saluta = function() {
    			alert(saluto);
    		};
    		this.salutaTest = function() {
    			alert("Ciao Test");
    		};
    		this.setSaluto=function(s){
    			saluto=s;
    		}
    	};
    
    	function SubTest(){
                 //qualcosa
    	};
    	SubTest.prototype=new Test;
    	
    	
    	var subtest1=new SubTest();
    	var subtest2=new SubTest();
    	subtest1.setSaluto("Ciao test1");
    	subtest1.saluta();	// Ciao test1
    	subtest2.saluta();	// Ciao test1    in teoria dovrebbe dare null visto che non ho fatto setSaluto di subtest2
    	alert(saluto);	    // saluto globale
    Qui saluto è privato di Test, ma a quanto pare istanziando due oggetto SubTest saluto viene condiviso da entrambi... perchè?
    Forum Additive monitora le discussioni più importanti!

  9. #29
    Linuss, è per questo che ti dicevo di usare classi ben collaudate, hai troppa confusione per partire con liberie tue. Ma fai come vuoi ... solo che quello che chiedi è banale per qualunque linguaggio, se conosci i principi dell'ereditarietà ... e pare di no, dato che parli di condivisione.

    Studia l'argomento, poi ci torni su ... consiglio spensierato
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  10. #30
    Utente di HTML.it L'avatar di Linusss
    Registrato dal
    Sep 2002
    Messaggi
    405
    Non ti allargare troppo su quello che mi è chiaro e quello che non mi è chiaro, avrò le idee confuse su javascript forse, questo te lo concedo.

    Se te mi dici che questo comportamento è normale per qualunque linguaggio OO, e che è dato dall'ereditarietà...allora quello che nn ha ben chiaro cosa singifichi ereditare sei te.

    Ad esempio, lo stesso codice qui sopra rapportato al Java:
    codice:
    public class Test {
        private String saluto;
        public Test(){
        }
        public void setSaluto(String s){
            saluto=s;
        }
        public void saluta(){
            System.out.println(saluto);
        }
    }
    
    public class SubTest extends Test{
        public SubTest(){}
    }
    
    public class Main {
    
        public static void main(String[] args) {
            String saluto="saluto globale";
            SubTest subtest1=new SubTest();
            SubTest subtest2=new SubTest();
            subtest1.setSaluto("ciao test1");
            subtest2.setSaluto("ciao test2");
            subtest1.saluta();  // ciao test1
            subtest2.saluta();  //ciao test2
            System.out.println(saluto);  //saluto globale
        }
    
    }
    Come vedi fa esattamente quello che uno si aspetti che faccia, ed è questa la VERA ereditarietà.

    Il codice Javascript invece, che a quanto leggo dalla tua pillola sembrerebbe essere il corretto uso dell'ereditarietà, non fa la stessa cosa perchè la variabile privata "saluto" viene CONDIVISA e non EREDITATA.
    Quindi, o ti sei sbagliato e questo non è il metodo corretto per ereditare, oppure javascript ha una "ereditarietà" finta, simulata, o quello che vuoi.

    In un post nell'altro thread(da me aperto), ti avevo fatto notare che io facevo(erroneamente) l'ereditarietà in questo modo:
    codice:
     	var saluto="saluto globale";
    	function Test() {
    		var saluto=null;
    		this.saluta = function() {
    			alert(saluto);
    		};
    		this.salutaTest = function() {
    			alert("Ciao Test");
    		};
    		this.setSaluto=function(s){
    			saluto=s;
    		}
    	};
    	
    	function SubTest(){
    		this.extend=Test;
    		this.extend();
    	};
    
    	
    	var subtest1 = new SubTest();
    	var subtest2=new SubTest();
    	subtest1.setSaluto("Ciao test1");
    	subtest2.setSaluto("Ciao test2");
    	subtest1.saluta();	// Ciao test1
    	subtest2.saluta();	// Ciao test2
    	alert(saluto);	    // saluto globale
    Questo codice fa esattamente quello che ci aspetta da una vera ereditarietà, tranne il fatto,fondamentale lo so, che subtest non è instanceof Test.
    Ma non essendoci polimorifismo in javascript(visto che non ci sono i tipi di dato), questo si avvicina di sicuro di più al concetto di ereditarietà del codice che hai scritto te.

    Comunque riconosco che il tuo è il metodo corretto, anzi no, ancora no, ma basta aggiungere Test.call(this) per farlo corretto:
    codice:
     	var saluto="saluto globale";
    	function Test() {
    		var saluto=null;
    		this.saluta = function() {
    			alert(saluto);
    		};
    		this.salutaTest = function() {
    			alert("Ciao Test");
    		};
    		this.setSaluto=function(s){
    			saluto=s;
    		}
    	};
    
    	function SubTest(){
                 Test.call(this,arguments)
                 //qualcosa
    	};
    	SubTest.prototype=new Test;
    	
    	
    	var subtest1=new SubTest();
    	var subtest2=new SubTest();
    	subtest1.setSaluto("Ciao test1");
    	subtest1.saluta();	// Ciao test1
    	subtest2.saluta();	// Ciao test2   
    	alert(saluto);	    // saluto globale
    ps. se ti sembrava tanto banale studia l'argomento, poi ci torni su ... consiglio spensierato
    Forum Additive monitora le discussioni più importanti!

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.