L'appel de méthode à l'intérieur d'une autre méthode en javascript?
Je vais avoir du JavaScript espace de noms de 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;
}
}
Maintenant, quand je suis à l'exécution de ce code c'est en donnant que TypeError: ce.C est pas une fonction. Quelqu'un peut-il me dire pourquoi il en est ainsi. Je sais que c'est quelque chose en rapport avec une portée lexicale, mais je suis incapable de comprendre cela.
Désolé, je suis un nouvel utilisateur et posté la première question, je ne sais pas comment poster des questions. Je vais garder cela à l'esprit, désormais. Merci.
OriginalL'auteur Ashish Jain | 2009-07-07
Vous devez vous connecter pour publier un commentaire.
Je pense que le problème est que lorsque
this.C()
est exécutée à l'intérieur de la fonction visée parB
,this
fait référence à l'objet qui contientB
, qui est, de l'objetA
. (Ce qui supposeB()
est appelée dans le contexte deA
)Le problème est,
C
n'existe pas sur l'objetA
, puisqu'il est défini dansB
. Si vous voulez appeler une fonction localeC()
dansB
, il suffit d'utiliserC()
.EDIT:
Aussi, je ne suis pas sûr de ce que vous avez posté est du JavaScript valide. Plus précisément,
B
devrait être défini de cette façon, puisque vous ne pouvez pas utiliser l'objet:syntaxe de la propriété à l'intérieur d'une fonction.OriginalL'auteur Peter
Vous devez être prudent lorsque vous utilisez ce à identifier quelque chose en Javascript parce que chaque fois que vous changez de portée "ce" changements.
De l'affectation de la " cette référence à sa propre variable permet de contourner cette.
C'est exactement ce dont j'avais besoin, Merci beaucoup.
OriginalL'auteur Hugoware
Je suis d'ailleurs surpris que votre code ne vous donne pas d'erreur sur le "C:" la ligne.
De toute façon, votre syntaxe pour définir une fonction n'est pas correct. Définir à l'aide du mot-clé var. Aussi, notez que j'ai créé la "fermeture" de sorte que la fonction C peut accéder 'cette'. Voir le code ci-dessous:
Si vous souhaitez affecter C à 'cette' objet, vous pouvez également le faire:
ouais désolé, j'ai réalisé mon mutisme, et donc supprimé mon commentaire 🙁 Mais Oui maintenant je suis d'accord avec votre réponse. +1 pour le mettre en place avec moi aussi 🙂
OriginalL'auteur SolutionYogi
Solution pour l'appel de méthodes à partir d'une autre méthode. (Essentiellement, le pointeur de la "ce" doit être assignée à une variable et la variable utilisée à la place de cela.)
Cet exemple montre comment on peut appeler une méthode à partir d'une autre méthode ou de l'extérieur à l'aide d'une instance de la fonction.
OriginalL'auteur Rex