Visualizzazione dei risultati da 1 a 6 su 6

Discussione: scoping

  1. #1

    scoping

    Ma che cosa è lo "scoping" di una funzione?
    C'è qualcuno che me lo sa dire?

    Grazie!

  2. #2
    percorso di validita' ...


    pippomovie.funzione = function() {
    trace( 'Hello World!' );
    }
    funzione();


    non accadra' niente perche' funzione ha valore, o scope, solo dentro il percorso pippomovie che sara' un MovieClip o un Object ....

    pippomovie.funzione();

    fara' il trace desiderato


    function myTrace(){ trace( 'Hello World' ); }
    altromovie.myTrace();
    myTrace();


    nel caso altromovie.myTrace() non accade niente, lo scope e' valido per questo keyframe ...


    da un movie, per una funzione nella root, o primo keyframe

    _root.myTrace();

    richiamo _root, dove myTrace e' valida e esistente, quindi tutto ok ...




    ... va meglio o peggio ?
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  3. #3
    va meglio, però ho comunque un problema.
    conosci questo sito: http://laco.wz.cz/tween ?

    bé, ho scaricato da lì delle "funzioni" e.. funzionano!
    fantastico, sia il sito che Robert Penner.

    Ma nel "callback" delle funzioni mi chiede lo "scope". Fino ad adesso io sono andato ad intuito, ma ora che mi hai risposto capisco un po' meglio.
    Solo che in questo caso lo scope della funzione è praticamente il suo percorso?

    No, vero!?

  4. #4
    Nella documentazione presente sul sito trovi degli esempi che possono aiutarti a capire meglio

    callback function to be called when finished (function or object with scope, func and args or string)

    function as callback

    function onEnd(){
    trace("onEnd");
    }
    my_mc.tween("_x",100,1,"linear",0,onEnd);

    // scope of function is my_mc._parent

    object as callback

    You can pass as callback object with properties

    func - function to be called when tween is finished
    scope - scope of function (this in called function)
    args - array of arguments passed to function

    updfunc - reference to function to be called on every update
    updscope - scope of update function (this object)
    updargs - array of arguments passed to update function

    startfunc - reference to function to be called on start of tween
    startscope - scope of start function (this object)
    startargs - array of arguments passed to start function

    * internal mechanism is: func.apply(scope,args)

    // on _root
    game={};
    game.players = ["john","steve"];
    game.showScore = function(id, score){
    trace("(this==_root.game) is "+(this==_root.game));
    trace(this.players[id] + " has " + score + " points");
    }

    // somewhere in nested movieclip
    var callback = {scope: _root.game, func: _root.game.showScore, args:[1,39]};
    my_mc.tween("_x",100,1,"linear",0,callback);
    /* or in 1 line:
    my_mc.tween("_x",100,1,"linear",0,{scope: _root.game, func: _root.game.showScore, args:[1,39]});
    */

    //output after finishing tween:

    (this==_root.game) is true
    steve has 39 points

    string as callback

    callbacks can be too defined as strings

    my_mc.tween("_x",100,1,"linear",0,'_root.gotoAndPl ay(8)');

    it is very problematic determine type of primitive parameters(number, string, boolean), in this case is 8 string

    for save type of passed argument use references:

    function callMe(my_obj, my_nr, my_bool) {
    trace(my_obj +">> typeof(my_obj) is "+ typeof(my_obj));
    trace(my_nr +">> typeof(my_nr) is "+ typeof(my_nr));
    trace(my_bool +">> typeof(my_bool) is "+ typeof(my_bool));
    }

    test_obj = {name: "test", id: 10};
    test_bool = true;
    test_nr = 99;

    my_mc.tween("_x",100,1,"linear",0,'_root.callMe(te st_obj,test_nr,test_bool)');

    Do not add spaces between argumets


    Lo scope come puoi vedere dagli esempi è praticamente l'oggetto che contiene la funzione (come puoi vedere ad esempio nella parte di esempio

    game={};
    game.players = ["john","steve"];
    game.showScore = function(id, score){
    trace("(this==_root.game) is "+(this==_root.game));
    trace(this.players[id] + " has " + score + " points");
    }

    // somewhere in nested movieclip
    var callback = {scope: _root.game[...]


    La funzione "showScore" è contenuta nell'oggetto "game", e quindi come scope tu indichi il percorso di tale oggetto, che è appunto "_root.game" (in quanto si trova sulla timeline principale)

  5. #5
    Grazie a tutti per le spiegazioni. Siete stati gentilissimi.
    Comunque non c'era bisogno che mi riscrivessi tutto l'esempio sel sito. Io l'avevo trovato l'esempio, ma siccome non conosco molto bene l'inglese volevo essere sicuro di quello che avevo capito.

    Ciao ciao.
    8bit

  6. #6
    Un copia-incolla non costa nulla e così ero sicuro, a volte nella fretta sfugge qualche cosa

    Felice d'aver contribuito a farti capire meglio le cose, ciao e alla prossima

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.