Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it L'avatar di carlomarx
    Registrato dal
    Oct 2009
    Messaggi
    1,669

    Modificare il context di una funzione

    Ciao a tutt*,
    ho il seguente problema. Ho del codice spezzettato in più file che vengono letti all'occorrenza tramite Ajax. Il parsing del codice voglio farlo tramite il costruttore di funzioni new Function(), perché voglio che avvenga in un momento separato dall'esecuzione vera e propria, che nel mio caso dovrà essere reiterata più volte (l'uso di eval mi costringerebbe ad accompagnare un nuovo parsing ad ogni nuova esecuzione, accrescendo notevolmente il carico di lavoro che dovrà svolgere l'interprete). Il grosso guaio è che, con mia grossa sorpresa, nonostante la nuova funzione venga dichiarata all'interno della closure che contiene il mio progetto, essa non è in grado di accedere alle variabili locali...: a differenza di eval, che invece ci riesce tranquillamente. Insomma, non viene creata come inner function, ma come global function (senza però che vengano create variabili globali che puntino ad essa, ovviamente). Ecco lo schema semplificato di quello che intendo.

    Se uso eval riesco ad accedere al local scope:

    codice:
    <!doctype html>
    <html>
    <head>
    <script type="text/javascript">
    var mioProgetto = (function() {
    	var miaVariabile = "ciao mondo";
    	var codiceOttenutoTramiteAjax = "alert(miaVariabile);";
    	eval(codiceOttenutoTramiteAjax);
    	return("blablabla");
    })();
    </script>
    </head>
    
    <body></body>
    </html>
    Se uso il costruttore di funzioni non riesco ad accedere al al local scope:

    codice:
    <!doctype html>
    <html>
    <head>
    <script type="text/javascript">
    var mioProgetto = (function() {
    	var miaVariabile = "ciao mondo";
    	var codiceOttenutoTramiteAjax = "alert(miaVariabile);";
    	var miaFunzione = new Function(codiceOttenutoTramiteAjax);
    	miaFunzione(); // l'esecuzione avviene in un momento successivo
    	return("blablabla");
    })();
    </script>
    </head>
    
    <body></body>
    </html>
    Mi chiedevo se è possibile far sì che la nuova funzione venga eseguita all'interno della closure che contiene il mio progetto. Se non si può fare, allora mi chiedo qual è l'alternativa...

    P.S.: Non voglio utilizzare neppure il metodo call...: le variabili cui la funzione dovrebbe accedere sono troppo numerose per essere inserite in un oggetto e passate alla nuova funzione come oggetti figli dell'oggetto this.

    Spero davvero che qualcun* riesca ad essermi di aiuto...

  2. #2
    Utente di HTML.it L'avatar di carlomarx
    Registrato dal
    Oct 2009
    Messaggi
    1,669
    toc toc
    ...c'è nessuno???

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.