J'ai une assez bonne compréhension de Javascript, sauf que je ne peux pas trouver une bonne façon de définir la variable "this". Considérer:
var myFunction = function(){
alert(this.foo_variable);
}
var someObj = document.body; //using body as example object
someObj.foo_variable = "hi"; //set foo_variable so it alerts
var old_fn = someObj.fn; //store old value
someObj.fn = myFunction; //bind to someObj so "this" keyword works
someObj.fn();
someObj.fn = old_fn; //restore old value
Y a-t-il un moyen de faire cela sans les 4 dernières lignes? C'est plutôt ennuyeux ... j'ai essayé de lier une fonction anonyme, que je trouvais belle et intelligente, mais en vain:
var myFunction = function(){
alert(this.foo_variable);
}
var someObj = document.body; //using body as example object
someObj.foo_variable = "hi"; //set foo_variable so it alerts
someObj.(function(){ fn(); })(); //fail.
Évidemment, passer la variable dans myFunction est une option ... mais ce n'est pas le but de cette question.
Merci.
javascript
variables
scope
this
Erik Philips
la source
la source
$.proxy(function, element)
pour que chaque fois que cette fonction est appelée, ce soit dans le contexte de element. api.jquery.com/jquery.proxy.bind()
Je pense que vous recherchez
call
:Cela appelle
myFunction
avecthis
set toobj
.Il existe également la méthode légèrement différente
apply
, qui prend les paramètres de la fonction comme un tableau:la source
Si vous souhaitez `` stocker '' la
this
valeur dans une fonction afin de pouvoir l'appeler plus tard de manière transparente (par exemple lorsque vous n'avez plus accès à cette valeur), vous pouvez lebind
faire (pas disponible dans tous les navigateurs cependant):la source
bind
est apparemment disponible dans IE9 +, FF4 +, Safari 5.1.4+ et Chrome 7+ (source) . Vous pouvez également appeler bind directement sur une fonction anonyme:var myFunction = function(){ /* this = something */ }.bind(something);
Ma recherche sur la façon de lier
this
m'a amené ici, donc je publie mes résultats: Dans «ECMAScript 2015», nous pouvons également définir ce lexicalement à l'aide des fonctions fléchées.Voir: https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Functions/Arrow_functions
Au lieu de:
Nous pouvons maintenant faire:
la source
Définition du
this
mot - clé en javascript.Javascript a 3 méthodes intégrées pour définir le
this
mot - clé de manière pratique. Ils sont tous situés sur l'Function.prototype
objet afin que chaque fonction puisse les utiliser (puisque chaque fonction hérite de ce prototype via l'héritage prototypique). Ces fonctions sont les suivantes:Function.prototype.call()
: Cette fonction prend l'objet que vous souhaitez utiliser commethis
premier argument. Ensuite, le reste des arguments sont les arguments respectifs de la fonction qui est appelée.Function.prototype.apply()
: Cette fonction prend l'objet que vous souhaitez utiliser commethis
premier argument. Ensuite, le deuxième argument est un tableau qui contient les valeurs des arguments de la fonction qui est appelée (le premier élément du tableau est le premier argument de la fonction, le deuxième argument du tableau est le deuxième argument de la fonction etc.).Function.prototype.bind()
: Cette fonction renvoie une nouvelle fonction qui a une valeur différente dethis
. Il prend l'objet que vous souhaitez définir commethis
valeur comme premier argument, puis renvoie un nouvel objet fonction.Différence entre call / apply et bind:
call
etapply
sont similaires dans le fait qu'ils appellent immédiatement la fonction (avec une valeur prédéfinie dethis
)bind
est différentcall
etapply
dans le fait que cette fonction renvoie une nouvelle fonction avec une liaison différente de lathis
valeur.Exemples:
la source