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 :

Référence du mot clef "this"


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2019
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2019
    Messages : 42
    Par défaut Référence du mot clef "this"
    Bonjour tout le monde, j'ai du mal à comprendre à quel objet fait référence le mot clef «this» à la ligne 24 du code suivant :

    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
    const compare = function(ids, asc){
    	return function(row1, row2){
    		const tdValue = function(row, ids){
    			return row.children[ids].textContent; 
    		}  
    		const tri = function(v1, v2){
    			if (v1 !== '' && v2 !== ''&& !isNaN(v1) && !isNaN(v2)){
    			return v1-v2;
    			}
    			else {
    			return v1.toString().localeCompare(v2);
    			}
    			return v1 !== '' && v2 !== '' && !isNaN(v1) && !isNaN(v2) ? v1 - v2 : v1.toString().localeCompare(v2); 
    		};
    		return tri(tdValue(asc ? row1 : row2, ids), tdValue(asc ? row2 : row1, ids));
    	}
    }
     
    const tbody = document.querySelector('tbody');
    const thx = document.querySelectorAll('th');
    const trxb = tbody.querySelectorAll('tr');
    thx.forEach(function(th){
    	th.addEventListener('click', function(){
    		let classe = Array.from(trxb).sort(compare(Array.from(thx).index0f(th), this.asc = !this.asc));
    		classe.forEach(function(tr){
    			tbody.appendChild(tr) 
    		}); 
    	}) 
    });
    Sur des exemples plus simples j'arrive à comprendre mais là j'ai du mal...

    Est-ce que c'est le <th> sur lequel on clique ?

    Merci pour votre aide.

  2. #2
    Membre Expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 910
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 910
    Par défaut
    Salut,

    Oui.

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2019
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2019
    Messages : 42
    Par défaut
    D'accord merci. Et est-ce que th.asc =!th.asc fonctionnerait aussi ?

  4. #4
    Membre Expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 910
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 910
    Par défaut
    Tu veux dire d'un point de vu syntaxe ? Parce que avec ton code on ne sait pas ce que tu veux faire, on n'a pas toutes les infos...

  5. #5
    Membre extrêmement actif Avatar de psychadelic
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    2 532
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 2 532
    Par défaut
    Citation Envoyé par Sinouhé87 Voir le message
    D'accord merci. Et est-ce que th.asc =!th.asc fonctionnerait aussi ?
    non, pour ça faudrait que tu utilise une fonction fléchée

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2019
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2019
    Messages : 42
    Par défaut
    Ah bon pourquoi ?

  7. #7
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 207
    Par défaut
    Bonjour,
    Citation Envoyé par psychadelic
    non, pour ça faudrait que tu utilise une fonction fléchée
    ce n'est pas une question de type de fonction mais de scope et dans le cas présent l'utilisation de th fonctionnerait.
    Pour s'en convaincre il suffit de tester
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    thx.forEach(function (th) {
      th.addEventListener('click', function () {
        console.log("th :", th, this, this === th);
      })
    });
    avec une « arrow function » on pourrait passer par le event.target mais th serait tout aussi valable.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    thx.forEach(function (th) {
      th.addEventListener('click', (e) => {
        const o = e.target;
        console.log("th :", th, this, o === th);
      })
    });

  8. #8
    Membre Expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 910
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 910
    Par défaut
    Perso je n'ai toujours pas compris la question, je parle de la deuxième (la réponse à la première étant oui)...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 6
    Dernier message: 20/08/2014, 16h09
  2. portée du mot clef this
    Par Torx26 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 28/04/2012, 21h15
  3. Réponses: 7
    Dernier message: 08/01/2006, 21h07
  4. mot clef sql pour nom de champ
    Par bobinou007 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 12/10/2004, 13h21

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