Maison > interface Web > js tutoriel > Comment le mot-clé « this » se comporte-t-il dans un littéral d'objet JavaScript ?

Comment le mot-clé « this » se comporte-t-il dans un littéral d'objet JavaScript ?

DDD
Libérer: 2024-12-26 03:24:08
original
709 Les gens l'ont consulté

How Does the `this` Keyword Behave Inside a JavaScript Object Literal?

Comment le mot-clé "this" se comporte dans un littéral d'objet en JavaScript

En JavaScript, le mot-clé "this" fait référence à l'objet actuel sur lequel la fonction a été invoquée. Cependant, la liaison de "this" peut prêter à confusion, en particulier lorsqu'elle est utilisée dans des littéraux d'objet.

Dans un littéral d'objet, la valeur de "this" n'est pas liée à l'objet lui-même mais plutôt à l'objet global ( fenêtre dans les navigateurs). Cela peut conduire à un comportement inattendu, comme le montre le code suivant :

var obj1 = {
  foo: new Date(),
  bar: new MyDate(this.foo)  //  this.foo is undefined
};
Copier après la connexion

Dans cet exemple, "this.foo" n'est pas défini dans le constructeur de MyDate car "this" fait référence à l'objet global, qui n'a pas de propriété nommée "foo".

Pour résoudre ce problème, vous pouvez explicitement lier "this" dans le littéral d'objet à l'aide de bind() méthode :

var obj4 = {};
obj4.foo = new Date();
obj4.bar = new MyDate(obj4.foo.bind(obj4));
Copier après la connexion

Cela garantit que "this" à l'intérieur du constructeur de MyDate fait référence à l'objet correct (obj4).

Vous pouvez également utiliser une fonction fléchée pour lier "this" à l'objet :

var obj3 = {
  foo: new Date(),
  bar: new MyDate(() => this.foo)
};
Copier après la connexion

Dans les fonctions fléchées, "this" est lié à la portée environnante au moment de la définition, qui dans ce cas est l'objet lui-même.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal