1. Cela pointe vers l'objet d'instanciation du constructeur
Dans l'article précédent, nous avons mentionné la différence entre l'utilisation de constructeurs nouveaux et non appelés, comme indiqué dans l'exemple suivant:
La copie de code est la suivante:
fonction benjamin (nom d'utilisateur, sexe) {
this.userName = nom d'utilisateur;
this.sex = sexe;
}
var benjamin = new benjamin ("zuojj", "mâle");
// Sorties: Benjamin {sexe: "mâle", nom d'utilisateur: "Zuojj"}
Console.log (Benjamin);
var ben = benjamin ("zhangsan", "femelle");
// Sorties: indéfinie
Console.log (Ben);
Lorsque le constructeur est appelé comme une fonction normale, aucune valeur n'est renvoyée, et cela pointe vers l'objet global. Alors, comment éviter les problèmes causés par le manque de nouveaux mots clés?
La copie de code est la suivante:
fonction benjamin (nom d'utilisateur, sexe) {
// Vérifiez si "ce" est un objet "Benjamin"
if (cette instance de benjamin) {
this.userName = nom d'utilisateur;
this.sex = sexe;
}autre {
Retourne New Benjamin (nom d'utilisateur, sexe);
}
}
var benjamin = new benjamin ("zuojj", "mâle");
// Sorties: Benjamin {sexe: "mâle", nom d'utilisateur: "Zuojj"}
Console.log (Benjamin);
var ben = benjamin ("zhangsan", "femelle");
// Sorties: Benjamin {nom d'utilisateur: "Zhangsan", sexe: "femme"}
Console.log (Ben);
Dans l'exemple ci-dessus, nous vérifions d'abord s'il s'agit d'une instance de Benjammin, sinon, utilisons de nouvelles pour appeler automatiquement le constructeur et l'instanciation, ce qui signifie que nous n'avons plus à nous soucier de manquer un nouveau constructeur d'instanciation de mots clés. Bien sûr, nous pouvons développer une mauvaise habitude de cette manière. Et si nous évitons ce phénomène? Nous pouvons lancer une erreur comme ceci:
La copie de code est la suivante:
fonction benjamin (nom d'utilisateur, sexe) {
// Vérifiez si "ce" est un objet "Benjamin"
if (cette instance de benjamin) {
this.userName = nom d'utilisateur;
this.sex = sexe;
}autre {
// Sinon, jetez une erreur.
Jetez une nouvelle erreur ("" Benjamin` invoqué sans "New`");
}
}
2. Cela pointe vers l'objet qui appelle la fonction
Voir l'exemple suivant:
La copie de code est la suivante:
var x = 10;
var obj = {
X: 10,
sortie: function () {
// sorties: vrai
console.log (this === obj);
retourner this.x;
},
InnerRobj: {
X: 30,
sortie: function () {
// sorties: vrai
console.log (this === obj.innerobj);
retourner this.x;
}
}
};
// Sorties: 10
console.log (obj.output ());
// Sorties: 30
console.log (obj.innerobj.output ());
3. Cela pointe vers l'objet global
Lors de la discussion du constructeur ci-dessus, nous avons également discuté que lorsque le nouveau ne sera pas applicable, cela indiquera l'objet global. Jetons un coup d'œil à deux exemples courants sujets aux erreurs:
La copie de code est la suivante:
var x = 100;
var obj = {
X: 10,
sortie: function () {
(fonction() {
// sorties: vrai
console.log (cette fenêtre ===);
// Sorties: intérieur: 100
console.log ("Inner:" + this.x);
}) ();
retourner this.x;
}
};
// Sorties: 10
console.log (obj.output ());
Lors de l'utilisation des fermetures, la portée change, et cela pointe vers la fenêtre (dans le navigateur).
La copie de code est la suivante:
var x = 100;
var obj = {
X: 10,
sortie: function () {
retourner this.x;
}
};
Var Output = obj.output;
// Sorties: 10
console.log (obj.output ());
// Sorties: 100
console.log (output ());
var obj2 = {
X: 30,
Sortie: obj.output
}
// Sorties: 30
console.log (obj2.Output ());
À l'heure actuelle, cela pointe toujours vers l'objet au moment de l'appel de fonction.
4. Cela pointe vers l'objet attribué par la méthode applicable / appel ()
La copie de code est la suivante:
var x = 100;
var obj = {
X: 10,
sortie: function () {
retourner this.x;
}
};
// Sorties: 10
console.log (obj.output ());
var obj2 = {
X: 40,
Sortie: obj.output
}
// Sorties: 40
console.log (obj.output.call (obj2));
// Sorties: 10
console.log (obj2.output.Apply (obj));
5. Celui de la fonction de rappel pointe vers l'objet pointé par cette fonction qui appelle le rappel.
La copie de code est la suivante:
// <input type = "text" value = "3" id = "txt_username">
$ ("# username"). sur ("cliquez", fonction () {
console.log (this.value);
});
6. Ceci dans fonction.prototype.bind
La méthode bind () crée une nouvelle fonction qui, lorsqu'elle est appelée, a son mot-clé défini sur la valeur fournie, avec une séquence donnée d'arguments précédant tout fourni lorsque la nouvelle fonction est appelée.
Exemple 1:
La copie de code est la suivante:
fonction de fonction () {
Renvoie ce.name;
}
//Function.prototype.bind
var per = personne.bind ({
Nom: "Zuojj"
});
console.log (par);
var obj = {
Nom: "Ben",
personne: personne,
par: par
};
// Sorties: Ben, Zuojj
console.log (obj.person (), obj.per ());
Exemple 2:
La copie de code est la suivante:
this.x = 9;
var module = {
X: 81,
getx: function () {return this.x; }
};
// Sorties: 81
console.log (module.getx ());
var getx = module.getx;
// Sorties: 9, car dans ce cas, "ce" fait référence à l'objet global
console.log (getx);
// Créer une nouvelle fonction avec le module «ce» lié à
var boundgetx = getx.bind (module);
// Sorties: 81
console.log (BoundGetX ());