Continuons à pratiquer nos incroyables compétences de lecture des spécifications. Si vous n’avez pas jeté un œil au premier épisode, c’est le moment de le faire !
Tous les épisodes
Prêt pour la partie 2 ?
Une manière amusante de se familiariser avec la spécification est de commencer par une fonctionnalité JavaScript que nous connaissons, et de découvrir comment elle est spécifiée.
Attention ! Cet épisode contient des algorithmes copiés-collés de la spécification ECMAScript en février 2020. Ils deviendront éventuellement obsolètes.
Nous savons que les propriétés sont recherchées dans la chaîne de prototypes : si un objet n’a pas la propriété que nous essayons de lire, nous remontons la chaîne de prototypes jusqu’à la trouver (ou jusqu’à atteindre un objet qui n’a plus de prototype).
Par exemple :
const o1 = { foo: 99 };
const o2 = {};
Object.setPrototypeOf(o2, o1);
o2.foo;
Où est défini le parcours de la chaîne de prototypes ?
Essayons de découvrir où ce comportement est défini. Une bonne entrée en matière est la liste des Méthodes Interne d'Objet.
Il y a à la fois [[GetOwnProperty]]
et [[Get]]
— nous sommes intéressés par la version qui ne se limite pas aux propriétés propres, donc nous choisirons [[Get]]
.
Malheureusement, le type de spécification des descripteurs de propriété a également un champ appelé [[Get]]
, donc en parcourant la spécification pour [[Get]]
, nous devons soigneusement distinguer les deux usages indépendants.