Je pensais que ce serait quelque chose que je pourrais facilement google, mais peut-être que je ne pose pas la bonne question ...
Comment puis-je définir ce que "ceci" fait référence dans une fonction javascript donnée?
par exemple, comme avec la plupart des fonctions de jQuery telles que:
$(selector).each(function() {
//$(this) gives me access to whatever selector we're on
});
Comment puis-je écrire / appeler mes propres fonctions autonomes qui ont une référence "this" appropriée lorsqu'elles sont appelées? J'utilise jQuery, donc s'il y a une manière spécifique à jQuery de le faire, ce serait idéal.
javascript
jquery
scope
this
user126715
la source
la source
$.proxy
Réponses:
Les javascripts
.call()
et les.apply()
méthodes vous permettent de définir le contexte d'une fonction.Vous pouvez maintenant appeler:
Ce qui alerterait
FOO
. Dans l'autre sens, le passageobj_b
alerteraitBAR!!
. La différence entre.call()
et.apply()
est que.call()
prend une liste séparée par des virgules si vous passez des arguments à votre fonction et avez.apply()
besoin d'un tableau.Par conséquent, vous pouvez facilement écrire une fonction
hook
en utilisant laapply()
méthode. Par exemple, nous voulons ajouter une fonctionnalité à la.css()
méthode jQuerys . Nous pouvons stocker la référence de fonction d'origine, écraser la fonction avec un code personnalisé et appeler la fonction stockée.Puisque l'
arguments
objet magique est un objet semblable à un tableau, nous pouvons simplement le passer àapply()
. De cette façon, nous garantissons que tous les paramètres sont transmis à la fonction d'origine.la source
obj_a
, par exemple, vous pouvez en créer une copievar boud_myfunc = myfunc.bind(obj_a)
et l'appeler simplementbound_myfunc()
si nécessaire.Utilisation
function.call
:Où se
that
trouve l'objet que vous voulezthis
dans la fonction.la source
function
est un mot-clé réservé; pensez à mettre à jour votre réponse pour inclure une fonction nommée car ilfunction.call(...)
n'est pas valide de JavaScript.jQuery utilise une
.call(...)
méthode pour affecter le nœud actuel à l'this
intérieur de la fonction que vous passez en tant que paramètre.ÉDITER:
N'ayez pas peur de regarder à l'intérieur du code de jQuery lorsque vous avez un doute, tout est en Javascript clair et bien documenté.
c'est-à-dire: la réponse à cette question est autour de la ligne 574,
callback.call( object[ name ], name, object[ name ] ) === false
la source
Vous pouvez utiliser la fonction de liaison pour définir le contexte
this
au sein d'une fonction.la source
Un autre exemple de base:
Ca ne fonctionne pas:
Travail:
Donc, fondamentalement: ajoutez simplement .bind (this) à votre fonction
la source