Reflect
est un module qui fournit des méthodes pour les opérations pouvant être interceptées avec des Proxy
[ES6].
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);
}
});
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
.
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:
Suppression
var del = function(obj, name) {
delete obj[name];
};
var del = Reflect.deleteProperty;
Affectation
var set = funtion(obj, field, value) {
obj[field] = value;
};
var set = Reflect.set
Accès
var get = function(obj, field) {
return obj[field];
};
var get = Reflect.get;
Vérification
var has = function(obj, field) {
return field in obj;
};
var has = Reflect.has;