J'ai essayé de consoler la variable Fullname après la fonction de fonction, mais il n'a pas changé de valeur, il suffit de consoler la valeur par défaut non défini code>, pourquoi?
3 Réponses :
C'est parce que lorsque les rappels sont appelés, le contexte ( Vous pouvez définir le manuel de rappel En utilisant fonction.bind () p > p> cette code>) du rappel n'est pas le
ClientData code> objet.
<!-- Provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
<script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>
Expliquez un peu sur .bind () code> .. + 1
Une fonction ceci i> n'est qu'un paramètre de son contexte d'exécution, ce n'est pas le contexte b>. Le problème de l'OP est que le rappel ceci i> n'est pas défini sur la bonne valeur, de sorte que c'est ce qui doit être corrigé (par liaison, une fermeture ou une modification de l'appel).
Cela fonctionne. Vous pouvez le faire sans utiliser la fonction BIND (). Il vous suffit de stocker l'objet de test dans la variable.
p>
function Test() { var t = this this.clientData = { fullName : "Not Set", setUserName: function (firstName, lastName) { t.clientData.fullName = firstName + " " + lastName; }, getUserInput2: function (firstName, lastName, callback) { callback(firstName, lastName); } }; this.getUserInput1 = function (firstName, lastName, callback) { callback(firstName, lastName); }; } var test = new Test(); test.getUserInput1("A1", "B1", test.clientData.setUserName); console.log("test.clientData.fullName : " + test.clientData.fullName);//Not Set //expected => A1 B1 test.clientData.getUserInput2("A2", "B2", test.clientData.setUserName); console.log("test.clientData.fullName : " + test.clientData.fullName);//Not Set
Je pense que vous voulez que ce soit var t = ceci; code>
Pour comprendre clairement la relève code> code>, vous devez comprendre qu'il représente la "portée" actuelle à l'intérieur de la fonction.
Lorsque vous déclarez: P>
function Person() { var self = this; self.fullName = "Not Set" self.setFullName = function(firstName, lastName) { self.fullName = firstName + " " + lastName; }; } var john = new Person(); john.setFullName("John", "Doe"); console.log("john.fullName : " + john.fullName); // Display : John Doe var bruce = new Person() bruce.setFullName("Bruce", "Wayne"); console.log("bruce.fullName : " + bruce.fullName); // Display : Bruce Wayne
Éventuellement un duplicata de
Ceci code> dans les fonctions de rappel i> a>. Aussi, vous voudrez peut-être lire Comment le mot-clé "this" travail? I> et < I> MDN: Ce i> .