2009-11-14 5 views

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.

+0

Aha, bummer. (ici) – prismofeverything

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:

  1. Appelé comme une simple fonction, il est lié à l'objet global/window.
  2. Appelée en tant que méthode sur un objet, elle fait référence à cet objet.
  3. 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.
  4. Appelé par sa propre méthode apply ou call, 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.