Reflect

Reflect est un module qui fournit des méthodes pour les opérations pouvant être interceptées avec des Proxy [ES6].

Proxy et Reflect

Les méthodes fournies ont le même nom que les méthodes des Proxy et prennent les même arguments — et pour cause, Proxy et Reflect sont conçu pour fonctionner ensemble. Une reflection permet de “faire la chose par défaut”: appliquer l’opération interceptée.

new Proxy(obj, {
  get: Reflect.get,
});
var loggedObj = new Proxy(obj, {
  get: function(target, name) {
    console.log("get", target, name);
    return Reflect.get(target, name);
  }
});

Reflect vs Object

La plupart des méthodes de Reflect sont très similaires voire identiques à celles implémentées par Object, mais il y a souvent de subtiles différences entre les deux.

Le module Reflect est un endroit plus naturel pour la plupart des méthodes de reflection précédemment définies sur Object. Pour des raisons de compatibilité, il est peu probable que les méthodes d’Object disparaissent, mais ces dernières on tout de même été dépréciées. Ainsi Function.prototype.apply et Function.prototype.call sont toutes deux depréciées en faveur de Reflect.apply.

Callback

Les éléments de syntaxe ne peuvent pas être utilisé comme callback, il est nécessaire de l’encapulser dans une fonction. Avec Reflect, toutes les opérations sont accessibles comme fonction de première de classe — c’est à dire des opérations que l’on peut stocker dans des variables.

Par exemple: