En Javascript, si nous aliasing une fonction (ou, attribuer une « référence à une fonction » à une autre variable), comme dans:En Javascript, est-il vrai que l'alias de fonction fonctionne tant que la fonction en cours d'alias ne touche pas "ceci"?
f = g;
f = obj.display;
obj.f = foo;
toutes les 3 lignes ci-dessus, ils fonctionneront aussi longtemps que la fonction/méthode sur le côté droit ne touche pas this
? Puisque nous passons dans tous les arguments, la seule façon dont il peut gâcher est quand la fonction/méthode sur la droite utilise this
? En fait, la ligne 1 est probablement correcte si g
est également une propriété de window
? Si g
fait référence à obj.display
, alors le même problème est là.
Dans la ligne 2, quand obj.display
touche this
, il est de signifier la obj
, mais quand f
est invoquée, la this
est window
, donc ils sont différents.
Dans la ligne 3, il est le même: quand f
est invoqué à l'intérieur du Code de obj
, le this
est obj
, tout en foo
susceptibles d'utiliser this
pour désigner window
si elle était une propriété de window
. (fonction globale).
Ainsi la ligne 2 peut être écrit comme
f = function() { obj.display.apply(obj, arguments) }
et la ligne 3:
obj.f = function() { foo.apply(window, arguments) }
Est-ce la bonne méthode? Et y a-t-il d'autres méthodes à part cela?
Cela me fait penser à M.C. Marteau – hobodave
je sais. J'essayais de ne pas le mentionner dans la question initiale. –
Félicitations, vous venez de découvrir la raison pour laquelle je déteste la programmation orientée objet en Javascript. En raison de l'absence de fonctions liées, vous devez toujours faire attention au contexte et (donc) à ce que cela indique. Maintenant vous pouvez passer à un vrai langage OOP (désolé :). – wump