Cet objet a toujours été un piège dans JS, et il est difficile de juger de quoi il pointe. Nous faisons souvent ce genre d'erreurs en raison de notre expérience de C ++ ou Python. Ensuite, parlons en détail de la propriété de cet objet.
Règle 1: ceci dans l'environnement mondial
L'environnement de JavaScript est intrinsèquement déterminé par les fonctions. Dans JS, le contexte ne peut pas être séparé par des blocs de code. L'environnement qui n'est pas enveloppé par les fonctions est l'environnement mondial. Cet dans l'environnement global indique la fenêtre variable globale. Voir l'exemple suivant
La copie de code est la suivante:
var name = 'jjj';
console.log (this.name);
// Le JJJ sera sorti avec succès
Rule2: Ceci lorsqu'il est appelé comme méthode
De toute évidence, cette situation est facile à juger, elle est cohérente avec soi à Python. Cela pointe sans aucun doute l'objet qui appelle la méthode
La copie de code est la suivante:
var user = {
Nom: 'KKK'
};
user.getName = function () {
console.log (this.name);
};
user.getName ();
// La sortie KKK sera sortie
Rule3: Ceci quand en tant que constructeur
Je n'ai pas besoin de dire grand-chose à ce sujet pour le moment. Il pointe évidemment l'objet nouvellement créé. Le fonctionnement du constructeur ne crée pas réellement un objet, mais n'est qu'une initialisation. L'objet est créé avant son exécution.
Voici quelques exemples
La copie de code est la suivante:
fonction user (name) {
this.name = name;
}
var f1 = nouvel utilisateur ('kkk');
var f2 = user ('kkk');
console.log (f1.name); // kkk
console.log (f2.Name); // Undefined n'a pas d'attribut de nom
Règle 4: cet appel indirect
Le soi-disant appel indirect fait référence à l'utilisation des fonctions Appliquer et appeler pour appeler, et cela pointe vers le premier paramètre de leur liste de paramètres.
La copie de code est la suivante:
var setName = function (name) {
this.name = name;
};
var user = {niveau: 2};
user.Apply (setName, 'jjj');
console.log (user.name); // jjj
Règle5: ceci dans d'autres cas
N'oubliez pas que cela ne sera pas modifié dans d'autres situations, et c'est aussi l'endroit le plus simple pour faire des erreurs.
La copie de code est la suivante:
var name = "codeur intelligent";
var personne = {
Nom: "Focoder",
bonjour: fonction (sth) {
var sayshello = fonction (sth) {
console.log (this.name + "dit" + sth);
};
Sayhello (SH);
}
}
Person.hello ("Hello World"); // Clever Coder dit Hello World
Le code ci-dessus a l'air bizarre, ne devrait-il pas être à la personne?
Nous devons nous rappeler que cela dans la fonction imbriquée ne pointera pas la fonction qui la niche. Dans cet exemple, cela dans Sayshello ne pointera pas vers la fonction correspondant à Hello. Si nous modifions légèrement l'exemple
La copie de code est la suivante:
bonjour: fonction (sth) {
console.log (this.name + "dit" + sth);
}
// Focoder dit bonjour le monde
Tout le monde aurait dû comprendre qu'à ce moment, Sayhello n'appelle pas comme méthode, ce qui pointe vers l'objet global. . .
À l'heure actuelle, le problème est que l'exemple initial d'utilisation de nœud pour exécuter affichera un non-défini Hello World. Je me demande s'il y a un maître pour l'expliquer.
Règle6: Eval enfreint toutes les règles
Enfin se terminer par un exemple
La copie de code est la suivante:
var name = "codeur intelligent";
var user = {
Nom: 'KKK'
};
user.getName = function () {
console.log (this.name);
};
var get = user.getName;
get (); // codeur intelligent
Est-ce que tu comprends?