IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

[DOM] portée de "this"


Sujet :

JavaScript

  1. #21
    Membre expert
    Avatar de FremyCompany
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    2 532
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 2 532
    Points : 3 239
    Points
    3 239
    Par défaut
    3. Les fonctions en JavaScript
    Un exemple que je n'ai pas abordé ici c'est les fonctions

    Vous aurez remarqué que les fonctions JavaScript ne sont pas apellée directement, mais bien avec apply... Pourquoi ?

    En fait, une fonction est un JSIO (ActiveX interfacé)

    En gros, il existe en code compilé la classe suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    class JSFunction : JSO {
      // Code JavaScript de la fonction ("function(value) { ... }")
      private _JSCode : String;
     
      public function apply(this, arguments) {
        return _MSCompil.exec(_JSCode, this, arguments);
      }
     
      public function call(this, paramArray arguments) {
        return apply(this, arguments);
      }
     
      /*
        ... 
      */
    }
    Cet objet hérite donc bien de Dictionnary[String, Object] par le biais JSO
    Ensuite, le compilateur JavaScript fait le reste.

    Une propriété intéressante de cette classe est le SCOPE
    Il s'agit de toutes les variables accessibles à la fonction

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    function f1() {
       window.alert("F1 a été appelée");
    }
    D'où la fonction f1 tire-t-elle window ???
    En fait, de son scope

    Voici en gros une explication simple du code compilé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
    /*
      Code généré lors de la création de la page
    */
    var __scope = new JSScope();
    for (property in window) {
       __scope.setKeyValue(property, window.retreiveValue(property))
    }
    /*
      Code compilé 
    */
    var f1 = new JSF(__scope.createCopy(), "function () { ... }")
     
     
    /* 
      Code résultant de la compilation par __MSCompil.exec de f1
      __scope est une copie de __scope déclaré plus haut
      ==> Ils évoluent pour l'instant de manière indépendante et si je changeais
         la valeur de window dans la fonction, cela ne changerait pas celle du 
         __scope en dehors de la fonction
    */ 
    function(this, arguments) {
      // Intègre les arguments dans le scope
      __scope.setKeyValue("this", this);
      __scope.setKeyValue("arguments", arguments);
      // Code compilé proprement dit
      var __tmp1 = __scope.retreiveValue("window");
      __tmp1.retreiveValue("alert").apply(
        __tmp1, 
        "F1 a été appelée"
      );
      // Remet tout à zéro (il ne vaut pas que la prochaine fois que la fonction soit appelée les variables soient conservées)
      // En gros __scope redevient une copie conforme du __scope duquel il vient
      __scope.reset();
    }

  2. #22
    Membre régulier

    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    64
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 64
    Points : 71
    Points
    71
    Par défaut
    oulalala, interessant, mais trop loin pour moi

    ceci dit, je note l'utilisation d'apply, et m'en reservirait

    Je note aussi qu'il ne faut pas "prototyper" des elements DOM et qu'il ne faut surtout pas se demander pourquoi ( sous peine de )

    Merci en tout cas

  3. #23
    Expert éminent sénior
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 650
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 650
    Points : 11 143
    Points
    11 143
    Par défaut
    Citation Envoyé par _cqu_
    oulalala, interessant, mais trop loin pour moi
    pareil... mais j'avoue ça me dépasse un peu
    On va donc arrêter là pour le moment

    pour ces infos Fremy

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo