Maison >interface Web >js tutoriel >Explication détaillée de ceci dans les compétences javascript_javascript

Explication détaillée de ceci dans les compétences javascript_javascript

WBOY
WBOYoriginal
2016-05-16 16:28:151282parcourir

Cet objet a toujours été un piège en js. Il est difficile de juger sur quoi il pointe, et nous commettons souvent ce type d'erreur en raison de notre expérience avec self depuis C ou python. Parlons ensuite de la propriété de cet objet en détail.

règle1 : ceci

de l'environnement global

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 global. Celui-ci pointe vers la fenêtre de variable globale. l'exemple suivant

Copier le code Le code est le suivant :

var nom='jjj';
console.log(this.name);
// affichera avec succès jjj

rule2 : this

lorsqu'elle est appelée en tant que méthode

Évidemment, cette situation est facile à juger. Elle est cohérente avec self en python. Cela pointe sans aucun doute l'objet qui appelle la méthode

.

Copier le code Le code est le suivant :

var utilisateur={
Nom : 'kkk'
};
user.getName=function(){
console.log(this.name);
};
utilisateur.getName();
// produira kkk

règle3 : ceci

lorsqu'il est utilisé comme constructeur

Inutile de dire qu'à ce stade, cela pointe évidemment vers l'objet nouvellement créé. L'exécution du constructeur ne crée pas réellement l'objet, mais l'initialise seulement. L'objet a été créé avant l'exécution
. Voici quelques exemples

Copier le code Le code est le suivant :

fonction Utilisateur (nom) {
This.name=nom;
>
var f1=nouvel utilisateur('kkk');
var f2=Utilisateur('kkk');
console.log(f1.name);//kkk
console.log(f2.name);//undefined n'a pas d'attribut de nom

règle4 : ceci en appel indirect

L'appel dit indirect fait référence à l'utilisation des fonctions apply et call to call. À ce stade, cela pointe vers le premier paramètre de leur liste de paramètres.

Copier le code Le code est le suivant :

var setName=fonction(nom){
This.name=nom;
};
var utilisateur={niveau:2};
user.apply(setName,'jjj');
console.log(user.name);//jjj

règle5 : ceci dans d'autres situations

N'oubliez pas que cela ne sera pas modifié dans les autres cas, c'est aussi là que les erreurs sont les plus susceptibles de se produire.

Copier le code Le code est le suivant :

var name = "codeur intelligent";
var personne = {
nom : "foocoder",
Bonjour : fonction(qch){
var sayhello = function(qch) {
console.log(this.name " dit " qch);
        };
          dire bonjour(qch);
>
>
person.hello("hello world");//un codeur intelligent dit bonjour tout le monde

Le code ci-dessus semble étrange. Cela ne devrait-il pas pointer vers une personne ?
Nous devons nous rappeler que this dans la fonction imbriquée ne pointera pas vers la fonction dans laquelle elle est imbriquée. Dans cet exemple, this dans sayhello ne pointera pas vers la fonction correspondant à hello. Si on change légèrement l'exemple pour devenir

Copier le code Le code est le suivant :

bonjour:fonction(qch){
console.log(this.name " dit " qch);
>
//foocoder dit bonjour tout le monde

Tout le monde aurait dû comprendre qu'à l'heure actuelle, sayhello n'est pas appelé en tant que méthode, donc cela pointe vers l'objet global. . .
À ce stade, le problème survient. Lors de l'exécution de l'exemple initial à l'aide de node, il affichera un message indéfini indiquant bonjour tout le monde. Je me demande si quelqu'un peut l'expliquer.

règle6 : l'évaluation enfreint toutes les règles

Terminez enfin par un exemple

Copier le code Le code est le suivant :

var name = "codeur intelligent";
var utilisateur={
Nom : 'kkk'
};
user.getName=function(){
console.log(this.name);
};
var get=user.getName;
get();//codeur intelligent

Tu comprends ?

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn