Comprendre le mot clé this

Commentaires

  1. Salut, super explications, je vais faire un tour sur les autres articles 😀
    J’ai juste une question, à propos du paragraphe sur les fonctions fléchées, le tout premier exemple :

    1 const obj = {
    2 test: function(delay) {
    3 console.log(this === obj); // true
    4 setTimeout(function() {
    5 console.log(this === obj); // false
    6 }, delay);
    7 }
    8 };
    9 obj.test(1000);

    Vous dites :

    J’ai testé pour me rendre compte du résultat, et je ne tombe pas sur l’objet global que j’aurais avec de simple fonction.
    J’ai un objet Timeout {
    _idleTimeout: 1,
    _idlePrev: null,
    …….
    [Symbol(refed)]: true,
    [Symbol(kHasPrimitive)]: false,
    [Symbol(asyncId)]: 5,
    [Symbol(triggerId)]: 1
    }
    Je me demandais pourquoi ? Est-ce la fonction setTimeout qui modifie le this de la fonction de callback ?
    Et puis la structure est légèrement différente, cet objet a un nom « Timeout », ce qui n’est pas le cas de mes propres objets.

    Merci 🙂

    1. Je devine que tu as ce résultat sur Node. En fait, quand tu fais appelle à la fonction setTimeout sur Node, un objet Timeout est créé en interne. De ce fait le this appelé dans la fonction callback de setTimeout fait référence à l’instance de cet objet Timeout. Les fonctions de timers de Node, bien qu’elles aient le même nom, fonctionnent en interne différemment de celles du navigateur. D’ailleurs la fonction setTimeout coté navigateur est un « raccourci » de window.setTimeout là on voit bien le contexte global window donc le this est bien attaché à ce contexte global c’est-à-dire l’objet window

Post a Comment

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur la façon dont les données de vos commentaires sont traitées.