11485 sujets

JavaScript, DOM et API Web HTML5

Bonjour,

Je n'arrive pas à trouver ma réponse alors je me lance :
On va dire que je suis à un niveau débutant+ en javascript, certain concepts m'échappent encore.
En lisant un livre sur le sujet, je suis tombé sur cet exemple dans un chapitre qui traite de this dans le contexte des objets et classes :

function Personne( nom, prenom ) {
            this.nom = nom;
            this.prenom = prenom;
			this.bonjour = function() {
				alert( "Bonjour " + this.prenom );
			}
        }
		
	var p = new Personne( 'Brillant', 'Alexandre' );
	setTimeout( p.bonjour, 1000 );

Comme il est expliqué dans ce livre, la méthode p.bonjour renvoie un 'Bonjour undefined" car quand la méthode setTimeout sera exécutée elle ne connaît pas l'instance p.

Et c'est là qu'arrive ma question : pourquoi ne connaît elle pas l'instance p alors qu'elle est déclarée 1 ligne plus haut ?
Merci d'avance car je ne sais absolument pas la logique.
Modifié par Jipeg99 (24 Mar 2018 - 02:51)
salut,

en fait ça vient de la spécificité des fonctions setTimeout et setInterval. Ces deux dernières exécutent le code dans un contexte séparé qui est toujours le contexte global. Cela veut dire que le this sera toujours équivalent à window.
Meilleure solution
Salut,

Ah oui effectivement je comprends mieux pourquoi Smiley smile

Merci beaucoup pour cette réponse et sa rapidité,
bonne journée.