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
DDDoriginal
2024-12-26 03:24:08641parcourir

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
};

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));

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)
};

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:
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