Comment passer contexte de fonction anonyme?
Il y a une certaine fonction, c'est faire quelque chose de beaucoup de travail et de son offre de rappel.
someFunc: function(argument, callback, context) {
//do something long
//call callback function
callback(context);
}
Dans l'application que j'utilise cette fonction
someFunc('bla-bla', function (context) {
//do something with this scope
context.anotherFunc();
}, this);
Comment implémenter la fonction de rappel sans passer context
paramètre?
Besoin de certains comme ceci:
someFunc('bla-bla', function () {
//do something with this scope
this.anotherFunc();
}, this);
- Donc, dans votre dernier exemple, il semble que vous êtes de passage le contexte (à quelque chose au moins) êtes-vous simplement curieux sur la façon de référence de l'argument s'il n'est pas nommé?
- Vous passez le paramètre, vous êtes tout simplement pas l'utiliser. Et je ne comprends pas pourquoi.
- L'OP est de l'utiliser en le passant dans le rappel de sorte que le rappel peuvent bénéficier des méthodes de l'extérieur
this
valeur. Donc, la question est de savoir comment atteindre le dernier bloc de code... obtenir le bonthis
dans le rappel de sorte qu'il n'a pas besoin d'être passé comme argument.
Vous devez vous connecter pour publier un commentaire.
Accepté la réponse semble quelque peu dépassé. En supposant que vous êtes d'exploitation sur une relativement moderne navigateur, vous pouvez utiliser
Function.prototype.bind
dans vanille javascript. Alternativement, si vous utilisez trait de soulignement ou jQuery, vous pouvez utiliser_.bind
ou$.proxy
respectivement (qui se replie surcall
/apply
si nécessaire).Ici est une simple démonstration de ces trois options:
Vous pouvez trouver le code dans un jsfiddle ici: http://jsfiddle.net/yMm6t/1/ (remarque: s'assurer que le développeur de la console est ouverte, ou vous ne verrez pas de sortie)
this
sous un autre nom de variable? Comme.bind(that)
?Utilisation
Function.prototype.call
pour appeler une fonction et de définir manuellement lathis
valeur de cette fonction.Maintenant votre rappel a l'attendu
this
valeur.Bien sûr, vous pouvez passer des arguments comme normal dans le
.call
invocation.