Maison >interface Web >js tutoriel >Qu'est-ce que « new.target » et comment fonctionne-t-il dans les classes ES6 ?

Qu'est-ce que « new.target » et comment fonctionne-t-il dans les classes ES6 ?

Linda Hamilton
Linda Hamiltonoriginal
2024-10-30 03:52:03736parcourir

 What is

Comprendre "new.target" dans ECMAScript 2015

Dans la spécification ECMAScript 2015, le mot-clé "new.target" est introduit et brièvement mentionné trois fois. Bien que MDN fournisse un certain contexte, il reste quelque peu vague.

Qu'est-ce que « new.target » ?

« new.target » est une méta-propriété, également connue sous le nom de Nouvelle cible. Il récupère la valeur actuelle du [[NewTarget]] slot interne de l'environnement de fonction non-flèche. Cette valeur est définie lorsqu'une fonction est invoquée avec le mot-clé "new".

Objectif de "new.target"

Son objectif principal est de déterminer si une fonction a été appelée en tant que constructeur ou non. De plus, il joue un rôle crucial dans l'implémentation des classes ES6.

Comment les classes ES6 utilisent "new.target"

Lorsqu'un constructeur de classe ES6 est invoqué via " new X", la valeur "this" n'est pas initialisée. L'objet n'est pas encore créé. Cependant, l'instance doit hériter du .prototype du constructeur initialement appelé.

"new.target" suit le constructeur "le plus externe" qui a reçu l'appel "new" lors des invocations super(). La procédure OrdinaryCreateFromConstructor utilise "new.target" au lieu du constructeur actuellement exécuté pour garantir l'héritage correct.

Exemple :

<code class="javascript">class Parent {
  constructor() {
    console.log(new.target); // Child!
  }
}
class Child extends Parent {
  constructor() {
    super();
    console.log(this);
  }
}

new Child;</code>

Dans cet exemple, "new .target" affichera "Child" dans le constructeur Parent, indiquant qu'il a été appelé avec le mot-clé "new".

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