12
votes

Méthode d'appel à l'intérieur d'une autre méthode en JavaScript?

J'ai un espace de noms JavaScript dire

A={

  CA: function() {
    this.B();
  },
  B: function() {
    var test='test';
    var result='t1';

    C: function() {
      this.test='test1';
      .....
      .....
      return 'test1';    
    }

   result=this.C();  
   return result; 
  }
}


1 commentaires

Désolé, je suis un nouvel utilisateur et posté la première question, je ne sais pas comment poster des questions. Je garderai cela à l'esprit maintenant. Merci.


4 Réponses :


5
votes

Je pense que le problème est que lorsque ceci.c () code> est exécuté à l'intérieur de la fonction mentionnée par B code>, Ce code> se réfère à la Objet contenant B code>, c'est-à-dire, objet A code>. (Cela suppose B () code> est appelé dans le contexte de A code>)

Le problème est, c code> n'existe pas sur l'objet A code>, car il est défini dans B code>. Si vous souhaitez appeler une fonction locale c () code> dans b code>, il suffit d'utiliser c () code>. P>

modifier: En outre, je ne sais pas ce que vous avez posté est valide JavaScript. Spécifiquement, B code> doit être défini de cette manière, car vous ne pouvez pas utiliser l'objet: Syntaxe de la propriété dans une fonction. P>

B: function()
{
  var test='test';
  var result='t1';

  var C = function()
  {
    this.test='test1';
    return 'test1';    
  }

 result=C();  
 return result; 
}


1 commentaires

Je pense que vous êtes correct et que j'ai aussi fait de la même manière (a fait la fonction et l'a appelée directement à partir de la fonction extérieure) après avoir frappé ma tête pour faire cela.c.



4
votes

Je suis en fait surpris que votre code ne vous donne pas d'erreur sur la ligne "C:"

Quoi qu'il en soit, votre syntaxe pour définir une fonction n'est pas correcte. Définissez-le à l'aide du mot-clé Var. Aussi, remarquez que j'ai créé la «fermeture» afin que la fonction c puisse accéder à «Ceci». Voir le code ci-dessous: p> xxx pré>

si vous souhaitez affecter c à "Cet objet", vous pouvez également faire: P>

A={

  CA: function()
  {
    this.B();
  },

  B: function()
  {
    var test='test';
    var result='t1';

    var self = this;
    this.C = function()
             {
              self.test='test1';
              .....
              .....
              return 'test1';    
             };

   result= this.C();
   return result; 
  }
}


2 commentaires

Vous ne pourrez pas utiliser 'Ceci' car 'Ceci' est un mot clé et vous devez créer la fermeture. En outre, parce que je définit le «Self» comme une variable locale, cela n'aura pas d'impact sur l'objet global.


Ouais désolé, j'ai réalisé mon dumbness, et donc supprimé mon commentaire :-( Mais oui maintenant je suis d'accord avec votre réponse. +1 pour la mise avec moi aussi :-)



28
votes

Vous devez faire attention lorsque vous utilisez ce pour identifier quoi que ce soit en JavaScript, car chaque fois que vous modifiez la portée "Ceci" changements.

Affectation de la "Ceci" référence à sa propre variable aide à obtenir autour de cela. xxx


2 commentaires

var self = ceci; est exactement ce que je cherchais! Merci!


C'est exactement ce dont j'avais besoin, merci beaucoup.



2
votes

solution pour appeler des méthodes d'une autre méthode. (Essentiellement le pointeur "Ceci" doit être affecté à une variable et la nouvelle variable utilisée à la place de cela.)

 function myfunction(){
    var me = this;

    me.method1 = function(msg){ alert(msg); }

    me.method2 = function(){ 
       me.method1("method1 called from method2"); 
    }
 }

 var f as new myfunction();
 f.method2();


0 commentaires