58 votes

Accéder au parent de l'objet javascript du parent

Quelque chose comme

 var life= {
        users : {
             guys : function(){ this.SOMTHING.mameAndDestroy(this.girls); },
             girls : function(){ this.SOMTHING.kiss(this.boys); },
        },
        mameAndDestroy : function(group){ },
        kiss : function(group){ }
};
 

this.SOMTHING est ce que j’imagine être le format, mais ce n’est peut-être pas. Qu'est-ce qui va revenir au parent d'un objet?

61voto

jazkat Points 1579

J'ai simplement ajouté dans la première fonction

parentThis = this;

et l'utilisation parentThis dans la sous-fonction. Pourquoi? Parce que dans le JavaScript, les objets sont doux. Un nouveau membre ne peut être ajouté à un objet mou par simple affectation (pas comme ie. Java où les objets classiques sont difficiles. La seule façon d'ajouter un nouveau membre à un objet dur est de créer une nouvelle classe) pour en savoir Plus à ce sujet ici: http://www.crockford.com/javascript/inheritance.html

Et aussi à la fin vous n'avez pas de tuer ou de détruire l'objet. Pourquoi j'ai trouvé ici: http://bytes.com/topic/javascript/answers/152552-javascript-destroy-object

Espérons que cette aide

50voto

harley.333 Points 1509

JavaScript n'offre pas cette fonctionnalité de manière native. Et je doute que vous puissiez même créer ce type de fonctionnalité. Par exemple:

 var Bobby = {name: "Bobby"};
var Dad = {name: "Dad", children: [ Bobby ]};
var Mom = {name: "Mom", children: [ Bobby ]};
 

À qui appartient Bobby?

19voto

Shog9 Points 82052

Dans ce cas, vous pouvez utiliser life pour référencer l'objet parent. Ou vous pouvez stocker une référence à life dans l'objet utilisateurs. Il ne peut pas y avoir de parent fixe disponible dans la langue, car les utilisateurs ne sont qu'une référence à un objet, et il pourrait y avoir d'autres références ...

 var death = { residents : life.users };
life.users.smallFurryCreaturesFromAlphaCentauri = { exist : function() {} };
// death.residents.smallFurryCreaturesFromAlphaCentauri now exists
//  - because life.users references the same object as death.residents!
 

Vous trouverez peut-être utile d'utiliser quelque chose comme ceci:

 function addChild(ob, childName, childOb)
{
   ob[childName] = childOb;
   childOb.parent = ob;
}

var life= {
        mameAndDestroy : function(group){ },
        kiss : function(group){ }
};

addChild(life, 'users', {
   guys : function(){ this.parent.mameAndDestroy(this.girls); },
   girls : function(){ this.parent.kiss(this.boys); },
   });

// life.users.parent now exists and points to life
 

4voto

Adam Bellaire Points 42797

Si je lis bien votre question, les objets en général sont agnostiques quant à leur emplacement. Ils ne savent pas qui sont leurs parents. Pour trouver cette information, vous devez analyser la structure de données parent. Le DOM a les moyens de le faire pour nous lorsque vous parlez d'objet d'élément dans un document, mais il semble que vous parlez d'objet vanille.

3voto

cmcculloh Points 11040

Voici:

 var life={
        users:{
             guys:function(){ life.mameAndDestroy(life.users.girls); },
             girls:function(){ life.kiss(life.users.guys); }
        },
        mameAndDestroy : function(group){ 
          alert("mameAndDestroy");
          group();
        },
        kiss : function(group){
          alert("kiss");
          //could call group() here, but would result in infinite loop
        }
};

life.users.guys();
life.users.girls();
 

Assurez-vous également que vous n'avez pas de virgule après la définition des "filles". Cela provoquera le blocage du script dans IE (chaque fois que vous avez une virgule après le dernier élément d'un tableau dans IE, il meurt).

Le voir courir

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X