Quelqu'un sait-il? Impossible de trouver cette question posée auparavant, même si elle semble assez basique.En javascript, comment puis-je savoir à quel objet une fonction est liée (c'est-à-dire son 'ceci') sans l'appeler?
1
A
Répondre
3
Le context
(le mot-clé this
) ce n'est pas complètement implicite, il peut être défini et modifié explicitement.
Par exemple:
function test() {
alert(this);
}
test.call("Hello world");
La fonction test
est appelée avec une chaîne comme le contexte. Donc, en conclusion, vous ne pouvez pas savoir ce qu'est this
sauf si vous le définissez explicitement, ou si vous êtes dans la fonction.
2
La même fonction verra différentes valeurs de this
selon son appel. Voir Crockford pour les détails, mais il y a quatre cas:
- Appelé comme une simple fonction, il est lié à l'objet global/window.
- Appelée en tant que méthode sur un objet, elle fait référence à cet objet.
- Appelé en tant que constructeur via le mot clé
new
, il s'agit de l'objet nouvellement instancié, qui hérite de l'objet stocké dans la propriétéprototype
de la fonction. - Appelé par sa propre méthode
apply
oucall
, il s'agit du premier argument fourni.
Si ces cas sonores complexes, fastidieuses et sujettes à l'erreur, à plus forte raison pour éviter de se fier à this
en dehors des méthodes, où il fait le plus de sens de toute façon.
Aha, bummer. (ici) – prismofeverything