Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

objet : contenu qui contient son contenant

1 réponse
Avatar
thierry
Bonjour,

Soit un objet COMPLETION qui contient deux elements html :

COMPLETION = function(search,liste){
this.search = search;
this.liste = liste;
[...]
this.search.obj = this;
search.addEventListener('keypress',this.keypressfunct,false);
}

COMPLETION.prototype = {
keypressfunct: function(e){
alert(this.obs.liste.id);
}
}

Dans le constructeur, l'EventListener 'keypress' est branché sur le
premier élément.

Dans la fonction de cet EventListener, je voudrais accéder au second
élément, mais le "this" de cette fonction est une référence au premier
élément qui ne permet pas d'accéder au second.

J'ai donc ajouter dans le constructeur:
this.search.obj = this;

Ainsi l'élément search contient une référence à l'objet dont il fait
partie, et je peux y accéder dans la fonction keypressfunct avec :
alert(this.obj.liste)

ça marche, mais je me demande si ça ne pose pas de problème ?
(en fait, ça me parait bizarre cette idée d'un contenu qui contient son
contenant).

Existe t-il une autre solution, ou celle-ci est-elle adaptée ?

Merci de vos idées !

1 réponse

Avatar
Y.D.
Le 27/11/2010 09:21, thierry a écrit :
Soit un objet COMPLETION qui contient deux elements html [...]
Dans le constructeur, l'EventListener 'keypress' est branché sur le premier
élément.

Dans la fonction de cet EventListener, je voudrais accéder au second élément,
mais le "this" de cette fonction est une référence au premier élément qui ne
permet pas d'accéder au second.

J'ai donc ajouter dans le constructeur:
this.search.obj = this;

Ainsi l'élément search contient une *référence* à l'objet dont il fait partie [...]

(en fait, ça me parait bizarre cette idée d'un contenu qui contient son contenant).



Ici, rien ne contient rien. Tu l'as écrit, tu as simplement ajouté /une
référence/ comme propriété à l'élément HTML search vers l'objet javascript qui
contient une référence vers lui. Le risque inhérent a cette construction est la
circularité this.search.obj.search.obj.search.obj... Note que tu as la même
chose avec tous les objets HTML (puisqu'il faut pouvoir accéder aux parents et
descendants), par exemple, un objet HTMLInputElement, sa propriété form et le
nom de cet objet (par ex. truc) this.form.truc.form.truc.form.truc etc.

Existe t-il une autre solution, ou celle-ci est-elle adaptée ?



Il y a toujours plus d'un chemin... mais ce que tu proposes ici remplit son but,
et permet d'avoir plusieurs objets de ce type sur la même page.

--
Y.D.