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 :

Port�e de variable et this


Sujet :

JavaScript

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre chevronn�
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    1 855
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 1 855
    Par d�faut Port�e de variable et this
    Bonjour,

    Pour comprendre un peu comment fonctionnait la port�e des variables, j'ai fait ce petit programme :
    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
     
    var msg = "tutu";
    var myObj = {};
     
    myObj.func1 = function(func){
    	var msg = "msg2";
    	var myThis = this;
     
    	alert("[myObj.func1] this1: " + this); // this correspond bien a myObj
     
    	setTimeout(
    		function(){
    			alert("[myObj.func1.setTimeout] this2: " + this);
     
    			func(msg);
     
    			//this.func1(func); // ne fonctionne pas (this correspond a Window)
    			myThis.func1(func);
    		},
    		1000
    	);
    }
     
    myObj.func1(
    	function(msg2){alert("message1: " + msg2 + ", this3: " + this);}
    );
    myObj.func1(
    	function(msg2){alert("message2: " + msg2 + ", this3: " + this);}
    );

    Dans setTimeout(function{...}), les variables func et msg correspondent bien aux variables qui sont visibles depuis myObj.func1() mais pourquoi alors ce n'est pas le cas pour this ? ... this correspond a l'objet Window et non pas � myObj

    En esp�rant que ma question a �t� clair ...

    Merci d'avance,

  2. #2
    Membre chevronn�

    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    311
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 311
    Par d�faut
    Tous simplement car this n�est pas une variable que tu d�clares, cette r�f�rence se comporte diff�remment sa port�e se limite � l�ex�cution d�une fonction.

    La valeur de this est d�termin�e lors de l�appel d�une fonction

    Si tu d�clenche l�ex�cution d�une m�thode de mani�re litt�rale avec (), this prend la valeur de la r�f�rence de l�objet encapsulant cette m�thode.

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    function LogName() {
    	console.log(this.Name);
    }
     
    var noob = {
    	Name : 'boboss123',
    	Display : LogName
    }
    noob.Display();
    //equivalent a 
    LogName.call(noob);
    // ou 
    noob.Display.apply(noob);

  3. #3
    Membre chevronn�
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    1 855
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 1 855
    Par d�faut
    ok, merci

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. $(this), fonction et port� des variables
    Par comode dans le forum jQuery
    R�ponses: 1
    Dernier message: 03/07/2014, 08h41
  2. Port�e des variables vbscript vers ASP
    Par Immobilis dans le forum ASP
    R�ponses: 3
    Dernier message: 03/11/2004, 10h14
  3. [XSL]Probl�me de port�e des variables
    Par djulesp dans le forum XSL/XSLT/XPATH
    R�ponses: 6
    Dernier message: 17/09/2004, 10h34
  4. [Port�e] port�e des variables
    Par parksto dans le forum Langage
    R�ponses: 7
    Dernier message: 09/05/2004, 21h05
  5. [FLASH MX 2004][XML]port�e de variable
    Par marco_ dans le forum Flash
    R�ponses: 8
    Dernier message: 29/04/2004, 15h47

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