Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1

    A = new Array(12, funz(para)) - Aggiornamento del secondo elemento a seconda di par

    Questo è il codice

    codice:
    function prova(variabile){
    if(variabile == "prima") return "prima";
    else return "dopo";
    }
    
    var anno = "prima";
    var a = new Array(12, prova(anno));
    alert(a[1]);
    anno = "dopo";
    alert(a[1]);
    Vorrei che la prima alert desse come risultato "prima", mentre la seconda desse come risultata "dopo". Provando il codice la seconda alert da come risultato sempre "prima", esiste un modo per poter cambiare un elemento di un array in questo modo?

  2. #2
    Utente bannato
    Registrato dal
    Apr 2009
    Messaggi
    530
    Interessante modello.

    Abbiamo bisogno di inserire questo passaggio :

    codice:
    anno = "dopo";
    a[1] = prova(anno);
    alert(a[1]);

  3. #3
    Moderatore di JavaScript L'avatar di br1
    Registrato dal
    Jul 1999
    Messaggi
    19,998
    Cioe' proprio quello che si voleva evitare....
    Il guaio per i poveri computers e' che sono gli uomini a comandarli.

    Attenzione ai titoli delle discussioni: (ri)leggete il regolamento
    Consultate la discussione in rilievo: script / discussioni utili
    Usate la funzione di Ricerca del Forum

  4. #4
    Utente bannato
    Registrato dal
    Apr 2009
    Messaggi
    530
    ... e per cui avrei dovuto dire avremmo bisogno, già .
    Ma pensando a questo come a un modello teorico su cui sviluppare la gestione di più vasto script e più numerosi dati, quellp che mi verrebbe da pensare è l' inserimento di una funzione che, richiamata al ridefinirsi di un singolo parametro, ridichiara eventualmente tutto l' Array e ne fa return.

  5. #5
    Originariamente inviato da br1
    Cioe' proprio quello che si voleva evitare....
    Concordo con br1, mi servirebbe una soluzione che mi eviti di aggiornare l'array tramite assegnamento.


    Il punto è che la prima volta la funzione viene chiamata, in seguito viene preso sempre come valore quello della prima chiamata.


    Originariamente inviato da Enzaccio
    l' inserimento di una funzione che, richiamata al ridefinirsi di un singolo parametro, ridichiara eventualmente tutto l' Array e ne fa return.
    Potresti spiegare meglio questa idea?

  6. #6
    Utente di HTML.it L'avatar di carlomarx
    Registrato dal
    Oct 2009
    Messaggi
    1,669
    Questo metodo funziona con Firefox. Non ho la più pallida idea se funzioni anche con altri browser...

    codice:
    function prova(variabile){
    	if (variabile === "prima") { return "prima"; }
    	else { return "dopo"; }
    }
    
    var anno, mioArr = [12, null];
    
    Object.defineProperty(mioArr, 1, {
    	get : function() { return prova(anno); },
    	enumerable : true,
    	configurable : false
    });
    
    anno = "prima";
    alert(mioArr[1]);
    
    anno = "dopo";
    alert(mioArr[1]);
    Qui un po' di documentazione...

    https://developer.mozilla.org/en/Jav...defineProperty

    Ciao

  7. #7
    Moderatore di JavaScript L'avatar di br1
    Registrato dal
    Jul 1999
    Messaggi
    19,998
    IE8 : no
    Chrome 12 : si
    Il guaio per i poveri computers e' che sono gli uomini a comandarli.

    Attenzione ai titoli delle discussioni: (ri)leggete il regolamento
    Consultate la discussione in rilievo: script / discussioni utili
    Usate la funzione di Ricerca del Forum

  8. #8
    Grazie per la risposta

    Ho provato anche con IE9 e funziona!

  9. #9
    Scusate eh, ci arrivo da segnalazione su un altro thread.
    A parte il fatto che si può rendere il codice ultimo più lineare se proprio si vogliono usare queste sintassi 1.8:
    codice:
    var anno, mioArr = [12];
    Object.defineProperty(mioArr, 1, {
    	get : function() { return anno; }
    });/*3 righe di codice anzichè 7*/
    
    anno = "prima";
    alert(mioArr[1]);
    
    anno = "dopo";
    alert(mioArr[1]);
    almeno evitiamo di mettere funzioni a quel punto non necessarie nel namespace globale (se dobbiamo usare queste sintassi, allora sfruttiamole appieno).

    Ma quello che non capisco è: per quale motivo inserire una funzione come 'prova' e poi due statements che assegnano ad 'anno' va bene, e invece fare così non andrebbe bene:
    codice:
    function anno(v){return mioArr[1]=v;}
    var mioArr=[12];/*2 righe di codice*/
    
    anno('prima');
    alert(mioArr[1]);
    anno('dopo');
    alert(mioArr[1]);
    crea solo una funzione e una array nel global. E anzichè scrivere
    anno='prima'
    al posto dell' = ci metti due parentesi:
    anno('prima')

    Cioè, per capire se c'è un motivo critico per cui dobbiamo ottenere la stessa cosa per forza assegnando un valore ad una variabile globale, o passandolo come parametro ad una funzione globale.

    Se un programmatore ha il controllo del suo ambiente, perchè dove dispone che anno='prima' non può invece disporre che anno('prima')? In cosa consiste il vantaggio che trae da
    anno='prima'
    rispetto ad
    anno('prima')?
    Mi riferisco proprio a questa circostanza - non ho dubbi poi che in qualche file particolarissimo creato chissà dove possa esser sorta la esigenza: mi chiedo perchè sia sorta in questo caso, cioè se stiamo lasciando che sia il codice a dettare a noi i nostri comportamenti, anzichè noi al codice.

    grazie ciau

  10. #10
    Utente di HTML.it L'avatar di carlomarx
    Registrato dal
    Oct 2009
    Messaggi
    1,669
    Non credo sia una buona idea resuscitare vecchie discussioni… Cmq…

    Originariamente inviato da TrueLies
    Scusate eh, ci arrivo da segnalazione su un altro thread.
    A parte il fatto che si può rendere il codice ultimo più lineare se proprio si vogliono usare queste sintassi 1.8:
    codice:
    var anno, mioArr = [12];
    Object.defineProperty(mioArr, 1, {
    	get : function() { return anno; }
    });/*3 righe di codice anzichè 7*/
    
    anno = "prima";
    alert(mioArr[1]);
    
    anno = "dopo";
    alert(mioArr[1]);
    Tre righe di codice, ma l'indice numero uno adesso risulta invisibile. Devi scrivere per forza enumerable: true con gli array!!

    P.S. Non ha molto senso che gli elimini la funzione "prova", visto che credo si trattasse di una funzione da sviluppare. Stava lì solo per farci capire che l'indice doveva richiamare una funzione che doveva essere disponibile anche per altri usi

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.