Sous la portée mondiale
ce;
Lorsque vous utilisez cela dans une portée globale, il pointe vers un objet global.
Voici une introduction détaillée à l'objet global:
L'objet global est un objet qui a été créé avant d'entrer dans tout contexte d'exécution;
Il n'y a qu'une seule copie de cet objet, et ses propriétés sont accessibles n'importe où dans le programme. Le cycle de vie de l'objet global se termine au moment où le programme sort.
Dans l'étape de création initiale de l'objet global, mathématiques, chaîne, date, parseInt sont initialisés comme ses propres attributs, etc., et d'autres objets supplémentaires peuvent également être créés comme des attributs (qui peuvent pointer vers l'objet global lui-même). Par exemple, dans le DOM, la propriété de fenêtre de l'objet global peut se référer à l'objet global lui-même.
C'est donc la même chose que celle-ci dans la console.
Lorsque vous appelez une fonction
foo ();
Ici, cela indique également l'objet global.
Lorsque vous appelez une méthode
test.foo ();
Dans cet exemple, cela indiquera l'objet de test.
Lorsque vous appelez un constructeur
Nouveau foo ();
Une fonction est utilisée avec le mot-clé nouveau lorsqu'il est appelé, que nous appelons un constructeur. À l'heure actuelle, dans la fonction, cela pointe vers l'objet nouvellement créé.
Lorsqu'il est explicitement réglé
fonction foo (a, b, c) {} // var bar = {}; foo.apply (bar, [1, 2, 3]); // Le tableau s'étendra à l'Obiblfoo.Call (bar, 1, 2, 3); // entraîne a = 1, b = 2, c = 3Lorsque vous utilisez les méthodes d'application et d'appel de la fonction.prototype, la valeur de ceci est explicitement définie sur le premier paramètre de la méthode.
Par conséquent, contrairement aux règles lors de l'appel d'une fonction, cela dans l'exemple ci-dessus pointe vers la barre.
Voici les méthodes d'appel et d'application:
Méthode d'appel :
Syntaxe: appel ([thisObj [, arg1 [, arg2 [, [, .argn]]]]])
Définition: Appelez une méthode d'un objet pour remplacer l'objet actuel par un autre objet.
Appliquer la méthode :
Syntaxe: Appliquer ([thisObj [, argarray]])
Définition: appliquez une méthode d'un certain objet et remplacez l'objet actuel par un autre objet.
Ici, nous devons noter que cela ne peut pas être utilisé pour pointer vers l'objet lui-même lorsque l'objet est littéralement déclaré. comme suit:
var obj = {moi: ceci}Ici, cela ne pointera pas vers l'OBJ, et l'application de ceci est limitée aux cinq situations ci-dessus.
Résumer
Bien que la situation ci-dessus soit principalement significative, cela dans le deuxième cas (c'est-à-dire lors de l'appel d'une fonction) est en fait rarement utile, ce qui est considéré comme une autre erreur dans la conception JavaScript.
Foo.method = function () {fonction test () {// Ceci est défini sur l'objet global} test ();}Comme nous l'avons mentionné ci-dessus, cela indiquera ici l'objet global, pas la fonction foo.
Afin d'obtenir un moyen de pointer de Foo dans le test, nous devons créer une variable locale à l'intérieur de la méthode pointant vers FOO.
Foo.method = function () {var that = this; fonction test () {// utilise cela au lieu de cela ici} test ();}Ce n'est qu'un nom de variable normal, mais il est souvent utilisé pour pointer vers cet externe.
Il y a une autre chose intéressante liée à l'alias de fonction, c'est-à-dire lorsqu'une méthode est affectée à une variable.
var test = someObject.MethodTest; test ();
Dans l'exemple ci-dessus, le test sera traité comme une fonction normale, donc selon le deuxième cas (c'est-à-dire lorsqu'une fonction est appelée), celle-ci pointera vers une variable globale, pas un objet.
Bien que cette liaison tardive semble une mauvaise décision au début, elle est en fait la base de l'héritage prototype.
fonction foo () {} foo.prototype.Method = function () {}; fonction bar () {} bar.prototype = foo.prototype; new bar (). Method ();À ce stade, lorsque la méthode est appelée, elle pointera vers l'objet d'instance de BAR.