Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    4,826

    tipizzazione parametri var

    ciao.
    1)E' possibile in javascript specificare il tipo dei parametri di una funzione(per tipo intendo una classe o un prototipo in js)?
    in modo che chi utilizza la libreria sia guidato e obbligato a passare un valore di un tipo specifico?


    2)E' possibile specificare un tipo base come parametro e costringere / guidare l'utente ad passare solo variabili di un tipo che derivi da quel tipo base?


    grazie.
    ciao.

  2. #2
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    4,826
    e se non è possibile ad es se voglio passare ad una funzione un tipo creato da me come faccio a eseguire i suoi metodi ?
    ad es :
    codice:
    function Tuple2() {
        var val1;
        var val2;
    }
    
    Tuple2.prototype = {
    
        SetTuple: function (value1, value2) {
            this.val1 = value1;
            this.val2 = value2;
        },
        GetTupleVal: function (posAt) {
            switch (posAt) {
                case 0:
                    return this.val1;
                    break;
                case 1:
                    return this.val2;
                    break;
            }
        }
    };
    se passo un istanza di tuple2 ad una funzione , posso chiamare i suoi metodi(i metodi di tuple2?)? tipo GetTupleVal?
    e se chiamo i metodi allo stesso modo ho il polimorfismo?
    e se passo un altro tipo che non centra un piffero cosa succede?

    io in questo caso vorrei gestire un blocco di dati indipendentemente dai blocchi di dati contenuti in esso , se si trattino di tuple1 ,tuple2,tuple3 o tuple4 mantenendo un valore al numero di elementi del blocco (1,2,3,4).
    grazie.

  3. #3
    Utente di HTML.it L'avatar di carlomarx
    Registrato dal
    Oct 2009
    Messaggi
    1,669

    Re: tipizzazione parametri var

    Originariamente inviato da giuseppe500
    1)E' possibile in javascript specificare il tipo dei parametri di una funzione(per tipo intendo una classe o un prototipo in js)?
    in modo che chi utilizza la libreria sia guidato e obbligato a passare un valore di un tipo specifico?
    L'unico modo è questo:

    codice:
    function addizione(addendo1, addendo2) {
    	if (typeof addendo1 !== "number") { throw new TypeError("First argument to function addizione must be a Number."); }
    	if (typeof addendo2 !== "number") { throw new TypeError("Second argument to function addizione must be a Number."); }
    	return addendo1 + addendo2;
    }
    
    alert(addizione(3, "ciao"));
    (verrà generato un errore del browser, controlla la console degli errori di Firefox!)

    Originariamente inviato da giuseppe500
    2)E' possibile specificare un tipo base come parametro e costringere / guidare l'utente ad passare solo variabili di un tipo che derivi da quel tipo base?
    L'unico modo è questo:

    codice:
    function Persona (sNome, sCognome) {
    	this.nome = sNome;
    	this.cognome = sCognome;
    }
    
    Persona.prototype.toString = function() { return this.nome + " " + this.cognome; };
    
    function Animale (sNome, sRazza) {
    	this.nome = sNome;
    	this.razza = sRazza;
    }
    
    Animale.prototype.toString = function() { return this.nome + " (" + this.razza + ")"; };
    
    var ospiti = [];
    
    function aggiungiOspite(oOspite /* solo persone!! */) {
    	if (!(oOspite instanceof Persona)) { throw new TypeError("Solo gli esseri umani vengono contati come ospiti :-)"); }
    	ospiti.push(oOspite);
    }
    
    aggiungiOspite(new Persona("Guido", "Baldi"));
    aggiungiOspite(new Persona("Luca", "Bianchi"));
    aggiungiOspite(new Persona("Enrico", "Spina"));
    
    alert(ospiti.join(", "));
    // fin qui tutto bene
    
    aggiungiOspite(new Animale("Bobby", "Cane"));
    // qui viene generato un errore!
    
    alert(ospiti.join(", "));
    (idem)

    Originariamente inviato da giuseppe500
    e se non è possibile ad es se voglio passare ad una funzione un tipo creato da me come faccio a eseguire i suoi metodi?
    Così:

    codice:
    var miaIstanza = new Tuple2();
    miaIstanza.SetTuple("valore1", "valore2");
    Originariamente inviato da giuseppe500
    e se chiamo i metodi allo stesso modo ho il polimorfismo?
    Spiegati meglio

    Originariamente inviato da giuseppe500
    e se passo un altro tipo che non centra un piffero cosa succede?
    Viene generato un errore. A meno che l'invocazione del metodo, invece di farla sull'oggetto, tu non la faccia sul prototipo, così:

    codice:
    var mioOggetto = { nome: "tizio" }; // l'oggetto non è un'istanza di Tuple2!!
    Tuple2.prototype.SetTuple.call(mioOggetto, "valore1", "valore2");
    A quel punto se l'errore viene generato o meno dipenderà dal metodo. In questo caso, vista la natura di SetTuple, non verrà mai generato nessun errore, qualsiasi cosa gli passi. Il nostro oggetto, oltre alla chiave nome adesso conterrà le due chiavi val1 e val2 assegnategli dal metodo SetTuple.

    Spero di essere stato chiaro.

    P.S. Per convenzione hanno l'iniziale maiuscola solo i costruttori! I metodi e le funzioni hanno l'iniziale minuscola ed eventualmente la maiuscola interna.

  4. #4
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    4,826
    sei un grande , grazie.

    Mi chiedevo, dove dicevi spiegati meglio : se utilizzo delle funzioni con lo stesso nome su vari tipi che derivano in js da una comune classe base(un interfaccia o una classe astratta in c++), in js penso d'aver capito che è gestito tutto a runtime ,istanzio l'oggetto:


    var instanza = new ClasseBase;
    var instanza = new Classe1;
    var instanza = new Classe2;

    e classe1 e classe2 derivano da ClasseBase

    codice:
    function ClasseBase(){
    };
    
    ClasseBase.prototype = {
    metodo: function()
    {alert("base")}
    
    }
    
    
    function Classe1(){
    };
    
    Classe1.prototype = {
    metodo: function()
    {alert("classe1")}
    
    }
    
    
    
    function Classe2(){
    };
    
    Classe2.prototype = {
    metodo: function()
    {alert("classe2")}
    
    }
    e faccio :
    codice:
    var vclasse1 = new classe1();
    var vclasse2 = new classe2();
    
    vclasse1.metodo()//"classe1" 
    vclasse2.metodo()//"classe2"
    o metto tutto in un array e chiamo la funzione metodo sugli elementi dell array a seconda del tipo avro una risposta diversa.
    è corretto?
    questo si chiama poliformismo in c++ e c#
    ciao.
    grazie.

  5. #5
    Utente di HTML.it L'avatar di carlomarx
    Registrato dal
    Oct 2009
    Messaggi
    1,669
    Originariamente inviato da giuseppe500
    […] a seconda del tipo avro una risposta diversa. è corretto?
    Più o meno sì. Quello che è scorretto è la derivazione. Nel tuo codice le due classi non sono istanze della classe base. Per ottenere quello che cerchi devi fare così:

    codice:
    function ClasseBase(){
    };
    
    ClasseBase.prototype = {
    metodo1: function()
    {alert("base")}
    
    }
    
    
    function Classe1(){
    };
    
    Classe1.prototype = new ClasseBase(); // così ottengo l'ereditarietà di "metodo1"!!!
    Classe1.prototype.metodo2 = function() {
    alert("classe1")};
    
    
    function Classe2(){
    };
    
    Classe2.prototype = new ClasseBase(); // (idem!)
    
    Classe2.prototype.metodo2 = function(){
    alert("classe2")};

  6. #6
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    4,826
    grazie di cuore delle lezioni .
    adesso vado a studiare json, il link va.

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.