Javascript ce mot-clé explication détaillée_connaissances de base
WBOYoriginal
2016-05-16 16:33:051185parcourir
1. cela pointe vers l'objet instancié par le constructeur
Dans l'article précédent, nous avons mentionné la différence entre appeler le constructeur en utilisant new et ne pas utiliser new, comme le montre l'exemple suivant :
function Benjamin(nom d'utilisateur, sexe) {
This.username = nom d'utilisateur;
This.sex = sexe;
>
var benjamin = new Benjamin("zuojj", "male");
//Sorties : Benjamin{sexe : "male", nom d'utilisateur : "zuojj">
console.log(benjamin);
var ben = Benjamin("zhangsan", "femelle");
//Sorties : non définies
console.log(ben);
Lorsque le constructeur est appelé comme une fonction normale, il n'y a pas de valeur de retour, et cela pointe vers l'objet global. Alors, comment éviter les problèmes causés par le manque de nouveaux mots clés ?
function Benjamin(nom d'utilisateur, sexe) {
//Vérifie si "ceci" est un objet "Benjamin"
if(cette instance de Benjamin) {
This.username = nom d'utilisateur;
This.sex = sexe;
}autre {
Retourner le nouveau Benjamin(nom d'utilisateur, sexe);
>
>
var benjamin = new Benjamin("zuojj", "male");
//Sorties : Benjamin{sexe : "male", nom d'utilisateur : "zuojj">
console.log(benjamin);
var ben = Benjamin("zhangsan", "femelle");
//Sorties : Benjamin {nom d'utilisateur : "zhangsan", sexe : "femelle"}
console.log(ben);
Dans l'exemple ci-dessus, nous vérifions d'abord s'il s'agit d'une instance de Benjamin. Sinon, utilisez new pour appeler automatiquement le constructeur et l'instancier. Cela signifie que nous n'avons plus à nous soucier de manquer le nouveau mot-clé pour instancier le. constructeur. Bien sûr, nous pouvons développer une mauvaise habitude de cette manière. Et si nous évitions ce phénomène ? Nous pouvons générer une erreur comme celle-ci :
function Benjamin(nom d'utilisateur, sexe) {
//Vérifie si "ceci" est un objet "Benjamin"
if(cette instance de Benjamin) {
This.username = nom d'utilisateur;
This.sex = sexe;
}autre {
// Sinon, renvoie une erreur.
throw new Error("`Benjamin` invoqué sans `new`");
>
>
2. cela pointe vers l'objet qui appelle la fonction
Lorsque nous avons discuté du constructeur ci-dessus, nous avons également expliqué que lorsque new n'est pas applicable, cela pointera vers l'objet global. Jetons un coup d'œil à deux exemples courants d'erreurs faciles :
La méthode bind() crée une nouvelle fonction qui, lorsqu'elle est appelée, a son mot-clé this défini sur la valeur fournie, avec une séquence donnée d'arguments précédant ceux fournis lorsque la nouvelle fonction est appelée.
Exemple 1 :
fonction personne() {
renvoie this.name;
>
//Fonction.prototype.bind
var per = personne.bind({
nom : "zuojj"
});
console.log(per);
var obj = {
nom : "Ben",
personne : personne,
par : par
};
//Sorties : Ben, zuojj
console.log(obj.person(), obj.per());
ceci.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, "this" fait référence à l'objet global
console.log(getX);
// crée une nouvelle fonction avec 'this' lié au module
varboundGetX = getX.bind(module);
//Sorties : 81
console.log(boundGetX());
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