From 844f5103992238c0c23203286dad16a466e89c97 Mon Sep 17 00:00:00 2001 From: julieng Date: Tue, 3 Aug 2021 08:03:09 +0200 Subject: move *.html to *.md --- .../reference/global_objects/proxy/index.html | 406 --------------------- .../reference/global_objects/proxy/index.md | 406 +++++++++++++++++++++ .../global_objects/proxy/proxy/apply/index.html | 115 ------ .../global_objects/proxy/proxy/apply/index.md | 115 ++++++ .../proxy/proxy/construct/index.html | 134 ------- .../global_objects/proxy/proxy/construct/index.md | 134 +++++++ .../proxy/proxy/defineproperty/index.html | 141 ------- .../proxy/proxy/defineproperty/index.md | 141 +++++++ .../proxy/proxy/deleteproperty/index.html | 110 ------ .../proxy/proxy/deleteproperty/index.md | 110 ++++++ .../global_objects/proxy/proxy/get/index.html | 133 ------- .../global_objects/proxy/proxy/get/index.md | 133 +++++++ .../proxy/getownpropertydescriptor/index.html | 129 ------- .../proxy/proxy/getownpropertydescriptor/index.md | 129 +++++++ .../proxy/proxy/getprototypeof/index.html | 151 -------- .../proxy/proxy/getprototypeof/index.md | 151 ++++++++ .../global_objects/proxy/proxy/has/index.html | 127 ------- .../global_objects/proxy/proxy/has/index.md | 127 +++++++ .../global_objects/proxy/proxy/index.html | 82 ----- .../reference/global_objects/proxy/proxy/index.md | 82 +++++ .../proxy/proxy/isextensible/index.html | 120 ------ .../proxy/proxy/isextensible/index.md | 120 ++++++ .../global_objects/proxy/proxy/ownkeys/index.html | 133 ------- .../global_objects/proxy/proxy/ownkeys/index.md | 133 +++++++ .../proxy/proxy/preventextensions/index.html | 121 ------ .../proxy/proxy/preventextensions/index.md | 121 ++++++ .../global_objects/proxy/proxy/set/index.html | 121 ------ .../global_objects/proxy/proxy/set/index.md | 121 ++++++ .../proxy/proxy/setprototypeof/index.html | 133 ------- .../proxy/proxy/setprototypeof/index.md | 133 +++++++ .../global_objects/proxy/revocable/index.html | 91 ----- .../global_objects/proxy/revocable/index.md | 91 +++++ 32 files changed, 2247 insertions(+), 2247 deletions(-) delete mode 100644 files/fr/web/javascript/reference/global_objects/proxy/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/proxy/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/proxy/proxy/apply/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/proxy/proxy/apply/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/proxy/proxy/construct/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/proxy/proxy/construct/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/proxy/proxy/defineproperty/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/proxy/proxy/defineproperty/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/proxy/proxy/deleteproperty/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/proxy/proxy/deleteproperty/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/proxy/proxy/get/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/proxy/proxy/get/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/proxy/proxy/getownpropertydescriptor/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/proxy/proxy/getownpropertydescriptor/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/proxy/proxy/getprototypeof/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/proxy/proxy/getprototypeof/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/proxy/proxy/has/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/proxy/proxy/has/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/proxy/proxy/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/proxy/proxy/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/proxy/proxy/isextensible/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/proxy/proxy/isextensible/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/proxy/proxy/ownkeys/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/proxy/proxy/ownkeys/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/proxy/proxy/preventextensions/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/proxy/proxy/preventextensions/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/proxy/proxy/set/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/proxy/proxy/set/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/proxy/proxy/setprototypeof/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/proxy/proxy/setprototypeof/index.md delete mode 100644 files/fr/web/javascript/reference/global_objects/proxy/revocable/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/proxy/revocable/index.md (limited to 'files/fr/web/javascript/reference/global_objects/proxy') diff --git a/files/fr/web/javascript/reference/global_objects/proxy/index.html b/files/fr/web/javascript/reference/global_objects/proxy/index.html deleted file mode 100644 index d02e303881..0000000000 --- a/files/fr/web/javascript/reference/global_objects/proxy/index.html +++ /dev/null @@ -1,406 +0,0 @@ ---- -title: Proxy -slug: Web/JavaScript/Reference/Global_Objects/Proxy -tags: - - ECMAScript 2015 - - JavaScript - - Proxy - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Proxy -original_slug: Web/JavaScript/Reference/Objets_globaux/Proxy ---- -
{{JSRef}}
- -

L'objet Proxy est utilisé afin de définir un comportement sur mesure pour certaines opérations fondamentales (par exemple, l'accès aux propriétés, les affectations, les énumérations, les appels de fonctions, etc.).

- -

Terminologie

- -
-
gestionnaire (handler)
-
Un objet qui contient les trappes qui intercepteront les opérations.
-
trappes
-
Les méthodes qui fournissent l'accès aux propriétés. Ce concept est analogue aux trappes utilisées dans les systèmes d'exploitations.
-
cible
-
L'objet virtualisé par le proxy. Il est souvent utilisé comme objet de stockage. Les invariants (c'est-à-dire les éléments de sémantique qui restent inchangés) relatifs à la non-extensibilité et au caractère non-configurable des propriétés sont vérifiés par rapport à la cible.
-
- -

Syntaxe

- -
var p = new Proxy(cible, gestionnaire);
-
- -

Paramètres

- -
-
cible
-
Une cible (qui peut être n'importe quel objet, un tableau, une fonction, ou même un autre proxy) qu'on souhaite envelopper dans un Proxy.
-
gestionnaire
-
Un objet dont les propriétés sont des fonctions qui définissent le comportement du proxy lorsqu'on utilise une opération sur celui-ci.
-
- -

Méthodes

- -
-
{{jsxref("Proxy.revocable()")}}
-
Permet de créer un objet Proxy révocable.
-
- -

Méthodes pour le gestionnaire

- -

L'objet utilisé comme gestionnaire regroupe les différentes fonctions « trappes » pour le Proxy.

- -
{{page('/fr/docs/Web/JavaScript/Reference/Objets_globaux/Proxy/handler', 'Méthodes') }}
- -

Exemples

- -

Exemple simple

- -

Dans ce court exemple, on renvoie le nombre 37 comme valeur par défaut lorsque la propriété nommée n'est pas présente dans l'objet. Pour cela, on utilise le gestionnaire correspondant à {{jsxref("Objets_globaux/Proxy/handler/get","get")}}.

- -
var handler = {
-    get: function(obj, prop){
-        return prop in obj?
-            obj[prop] :
-            37;
-    }
-};
-
-var p = new Proxy({}, handler);
-p.a = 1;
-p.b = undefined;
-
-console.log(p.a, p.b); // 1, undefined
-console.log('c' in p, p.c); // false, 37
-
- -

Proxy « invisible »

- -

Dans cet exemple, le proxy transfère toutes les opérations qui sont appliquées à l'objet cible.

- -
var cible = {};
-var p = new Proxy(cible, {});
-
-p.a = 37; // L'opération est transmise à la cible par le proxy
-
-console.log(cible.a); // 37. L'opération a bien été transmise
-
- -

Validation

- -

En utilisant un Proxy, il devient simple de valider les valeurs passées à un objet. Dans cet exemple, on utilise le gestionnaire correspondant à {{jsxref("Objets_globaux/Proxy/handler/set","set")}}.

- -
let validateur = {
-  set: function(obj, prop, valeur) {
-    if (prop === 'âge') {
-      if (!Number.isInteger(valeur)) {
-        throw new TypeError('Cet âge n\'est pas un entier.');
-      }
-      if (valeur > 200) {
-        throw new RangeError('Cet âge semble invalide.');
-      }
-    }
-
-    // Le comportement par défaut : enregistrer la valeur
-    obj[prop] = valeur;
-
-    // On indique le succès de l'opération
-    return true;
-  }
-};
-
-let personne = new Proxy({}, validateur);
-
-personne.âge = 100;
-console.log(personne.âge); // 100
-personne.âge = 'jeune';    // lève une exception
-personne.âge = 300;        // lève une exception
-
- -

Étendre un constructeur

- -

En utilisant une fonction proxy, on peut étendre un constructeur avec un nouveau constructeur. Dans cet exemple, on utilise les gestionnaires correspondants à {{jsxref("Objets_globaux/Proxy/handler/construct","construct")}} et {{jsxref("Objets_globaux/Proxy/handler/apply","apply")}}.

- -
function étendre(sup,base) {
-  var descripteur = Object.getOwnPropertyDescriptor(
-    base.prototype, "constructor"
-  );
-  base.prototype = Object.create(sup.prototype);
-  var gestionnaire = {
-    construct: function(cible, args) {
-      var obj = Object.create(base.prototype);
-      this.apply(cible,obj,args);
-      return obj;
-    },
-    apply: function(cible, that, args) {
-      sup.apply(that,args);
-      base.apply(that,args);
-    }
-  };
-  var proxy = new Proxy(base,gestionnaire);
-  descripteur.value = proxy;
-  Object.defineProperty(base.prototype, "constructor", descripteur);
-  return proxy;
-}
-
-var Personne = function(nom){
-  this.nom = nom;
-};
-
-var Garçon = étendre(Personne, function(nom, âge) {
-  this.âge = âge;
-});
-
-Garçon.prototype.genre = "M";
-
-var Pierre = new Garçon("Pierre", 13);
-console.log(Pierre.genre);  // "M"
-console.log(Pierre.nom);  // "Pierre"
-console.log(Pierre.âge);  // 13
- -

Manipuler les nœuds DOM

- -

Parfois, on veut passer un attribut ou un nom de classe entre deux éléments différents. Dans cet exemple, on utilise le gestionnaire lié à {{jsxref("Objets_globaux/Proxy/handler/set","set")}}.

- -
let vue = new Proxy({
-  selected: null
-},
-{
-  set: function(obj, prop, nouvelleValeur) {
-    let ancienneValeur = obj[prop];
-
-    if (prop === 'selected') {
-      if (ancienneValeur) {
-        ancienneValeur.setAttribute('aria-selected', 'false');
-      }
-      if (nouvelleValeur) {
-        nouvelleValeur.setAttribute('aria-selected', 'true');
-      }
-    }
-
-    // Le comportement par défaut : enregistrer la valeur
-    obj[prop] = nouvelleValeur;
-
-    // On indique le succès de l'opération
-    return true;
-  }
-});
-
-let i1 = vue.selected = document.getElementById('item-1');
-console.log(i1.getAttribute('aria-selected')); // 'true'
-
-let i2 = vue.selected = document.getElementById('item-2');
-console.log(i1.getAttribute('aria-selected')); // 'false'
-console.log(i2.getAttribute('aria-selected')); // 'true'
-
- -

Corriger une valeur et ajouter une propriété supplémentaire

- -

Dans l'exemple qui suit, le proxy produits évalue la valeur passée et la convertit en tableau si besoin. L'objet supporte également la propriété supplémentaire dernierNavigateur à la fois comme accesseur et mutateur.

- -
let produits = new Proxy({
-  navigateurs: ['Internet Explorer', 'Netscape']
-},
-{
-  get: function(obj, prop) {
-    // Une propriété supplémentaire
-    if (prop === 'dernierNavigateur') {
-      return obj.navigateurs[obj.navigateurs.length - 1];
-    }
-
-    // Le comportement par défaut : renvoyer la valeur
-    return obj[prop];
-  },
-  set: function(obj, prop, valeur) {
-    // Une propriété supplémentaire
-    if (prop === 'dernierNavigateur') {
-      obj.navigateurs.push(valeur);
-      return true;
-    }
-
-    // on convertit la valeur si ce n'est pas un tableau
-    if (typeof valeur === 'string') {
-      valeur = [valeur];
-    }
-
-    // Le comportement par défaut : enregistrer la valeur
-    obj[prop] = valeur;
-
-    // On indique le succès de l'opération
-    return true;
-  }
-});
-
-console.log(produits.navigateurs); // ['Internet Explorer', 'Netscape']
-produits.navigateurs = 'Firefox'; // on passe une chaîne
-console.log(produits.navigateurs); // ['Firefox'] <- pas de problème, elle est convertie en tableau
-
-produits.dernierNavigateur = 'Chrome';
-console.log(produits.navigateurs); // ['Firefox', 'Chrome']
-console.log(produits.dernierNavigateur); // 'Chrome'
-
- -

Trouver un élément dans un tableau grâce à sa propriété

- -

Dans cet exemple, ce proxy étend le tableau avec des fonctionnalités supplémentaires. Ici, on définit des propriétés sans utiliser {{jsxref("Objets_globaux/Object/defineProperties","Object.defineProperties")}}. Cet exemple pourrait être adapté pour trouver la ligne d'un tableau à partir d'une de ces cellules (la cible serait alors table.rows).

- -
let produits = new Proxy([
-  { nom: 'Firefox', type: 'navigateur' },
-  { nom: 'SeaMonkey', type: 'navigateur' },
-  { nom: 'Thunderbird', type: 'client mail' }
-],
-{
-  get: function(obj, prop) {
-    // Le comportement par défaut : on renvoie la valeur
-    // prop est généralement un entier
-    if (prop in obj) {
-      return obj[prop];
-    }
-
-    // On obtient le nombre de produits
-    // un alias pour products.length
-    if (prop === 'nombre') {
-      return obj.length;
-    }
-
-    let résultat, types = {};
-
-    for (let produit of obj) {
-      if (produit.nom === prop) {
-        résultat = produit;
-      }
-      if (types[produit.type]) {
-        types[produit.type].push(produit);
-      } else {
-        types[produit.type] = [produit];
-      }
-    }
-
-    // Obtenir un produit grâce à un nom
-    if (résultat) {
-      return résultat;
-    }
-
-    // Obtenir un produit par type
-    if (prop in types) {
-      return types[prop];
-    }
-
-    // Obtenir les types de produits
-    if (prop === 'types') {
-      return Object.keys(types);
-    }
-
-    return undefined;
-  }
-});
-
-console.log(produits[0]); // { nom: 'Firefox', type: 'navigateur' }
-console.log(produits['Firefox']); // { nom: 'Firefox', type: 'navigateur' }
-console.log(produits['Chrome']); // undefined
-console.log(produits.navigateur); // [{ nom: 'Firefox', type: 'navigateur' }, { nom: 'SeaMonkey', type: 'navigateur' }]
-console.log(produits.types); // ['navigateur', 'client mail']
-console.log(produits.nombre); // 3
-
- -

Un exemple avec toutes les trappes

- -

Pour illustrer l'ensemble des trappes, on tente de « proxifier » un objet non natif : l'objet global docCookies créé grâce à cet exemple.

- -
/*
-  var docCookies = ... définir l'objet "docCookies" grâce à
-  https://developer.mozilla.org/en-US/docs/DOM/document.cookie#A_little_framework.3A_a_complete_cookies_reader.2Fwriter_with_full_unicode_support
-*/
-
-var docCookies = new Proxy(docCookies, {
-  "get": function (oTarget, sKey) {
-    return oTarget[sKey] || oTarget.getItem(sKey) || undefined;
-  },
-  "set": function (oTarget, sKey, vValue) {
-    if (sKey in oTarget) { return false; }
-    return oTarget.setItem(sKey, vValue);
-  },
-  "deleteProperty": function (oTarget, sKey) {
-    if (sKey in oTarget) { return false; }
-    return oTarget.removeItem(sKey);
-  },
-  "enumerate": function (oTarget, sKey) {
-    return oTarget.keys();
-  },
-  "ownKeys": function (oTarget, sKey) {
-    return oTarget.keys();
-  },
-  "has": function (oTarget, sKey) {
-    return sKey in oTarget || oTarget.hasItem(sKey);
-  },
-  "defineProperty": function (oTarget, sKey, oDesc) {
-    if (oDesc && "value" in oDesc) { oTarget.setItem(sKey, oDesc.value); }
-    return oTarget;
-  },
-  "getOwnPropertyDescriptor": function (oTarget, sKey) {
-    var vValue = oTarget.getItem(sKey);
-    return vValue ? {
-      "value": vValue,
-      "writable": true,
-      "enumerable": true,
-      "configurable": false
-    } : undefined;
-  },
-});
-
-/* Cookies test */
-
-console.log(docCookies.mon_cookie1 = "Première valeur");
-console.log(docCookies.getItem("mon_cookie1"));
-
-docCookies.setItem("mon_cookie1", "Valeur modifiée");
-console.log(docCookies.mon_cookie1);
- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-proxy-objects', 'Proxy')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ES2016', '#sec-proxy-objects', 'Proxy')}}{{Spec2('ES2016')}}
{{SpecName('ES2017', '#sec-proxy-objects', 'Proxy')}}{{Spec2('ES2017')}}
{{SpecName('ESDraft', '#sec-proxy-objects', 'Proxy')}}{{Spec2('ESDraft')}}
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Proxy", 2)}}

- -

Voir aussi

- - - -

Notes de licence

- -

Certains composants de cette page (texte, exemples) ont été copiés ou adaptés du Wiki ECMAScript dont le contenu est sous licence CC 2.0 BY-NC-SA.

diff --git a/files/fr/web/javascript/reference/global_objects/proxy/index.md b/files/fr/web/javascript/reference/global_objects/proxy/index.md new file mode 100644 index 0000000000..d02e303881 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/proxy/index.md @@ -0,0 +1,406 @@ +--- +title: Proxy +slug: Web/JavaScript/Reference/Global_Objects/Proxy +tags: + - ECMAScript 2015 + - JavaScript + - Proxy + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Proxy +original_slug: Web/JavaScript/Reference/Objets_globaux/Proxy +--- +
{{JSRef}}
+ +

L'objet Proxy est utilisé afin de définir un comportement sur mesure pour certaines opérations fondamentales (par exemple, l'accès aux propriétés, les affectations, les énumérations, les appels de fonctions, etc.).

+ +

Terminologie

+ +
+
gestionnaire (handler)
+
Un objet qui contient les trappes qui intercepteront les opérations.
+
trappes
+
Les méthodes qui fournissent l'accès aux propriétés. Ce concept est analogue aux trappes utilisées dans les systèmes d'exploitations.
+
cible
+
L'objet virtualisé par le proxy. Il est souvent utilisé comme objet de stockage. Les invariants (c'est-à-dire les éléments de sémantique qui restent inchangés) relatifs à la non-extensibilité et au caractère non-configurable des propriétés sont vérifiés par rapport à la cible.
+
+ +

Syntaxe

+ +
var p = new Proxy(cible, gestionnaire);
+
+ +

Paramètres

+ +
+
cible
+
Une cible (qui peut être n'importe quel objet, un tableau, une fonction, ou même un autre proxy) qu'on souhaite envelopper dans un Proxy.
+
gestionnaire
+
Un objet dont les propriétés sont des fonctions qui définissent le comportement du proxy lorsqu'on utilise une opération sur celui-ci.
+
+ +

Méthodes

+ +
+
{{jsxref("Proxy.revocable()")}}
+
Permet de créer un objet Proxy révocable.
+
+ +

Méthodes pour le gestionnaire

+ +

L'objet utilisé comme gestionnaire regroupe les différentes fonctions « trappes » pour le Proxy.

+ +
{{page('/fr/docs/Web/JavaScript/Reference/Objets_globaux/Proxy/handler', 'Méthodes') }}
+ +

Exemples

+ +

Exemple simple

+ +

Dans ce court exemple, on renvoie le nombre 37 comme valeur par défaut lorsque la propriété nommée n'est pas présente dans l'objet. Pour cela, on utilise le gestionnaire correspondant à {{jsxref("Objets_globaux/Proxy/handler/get","get")}}.

+ +
var handler = {
+    get: function(obj, prop){
+        return prop in obj?
+            obj[prop] :
+            37;
+    }
+};
+
+var p = new Proxy({}, handler);
+p.a = 1;
+p.b = undefined;
+
+console.log(p.a, p.b); // 1, undefined
+console.log('c' in p, p.c); // false, 37
+
+ +

Proxy « invisible »

+ +

Dans cet exemple, le proxy transfère toutes les opérations qui sont appliquées à l'objet cible.

+ +
var cible = {};
+var p = new Proxy(cible, {});
+
+p.a = 37; // L'opération est transmise à la cible par le proxy
+
+console.log(cible.a); // 37. L'opération a bien été transmise
+
+ +

Validation

+ +

En utilisant un Proxy, il devient simple de valider les valeurs passées à un objet. Dans cet exemple, on utilise le gestionnaire correspondant à {{jsxref("Objets_globaux/Proxy/handler/set","set")}}.

+ +
let validateur = {
+  set: function(obj, prop, valeur) {
+    if (prop === 'âge') {
+      if (!Number.isInteger(valeur)) {
+        throw new TypeError('Cet âge n\'est pas un entier.');
+      }
+      if (valeur > 200) {
+        throw new RangeError('Cet âge semble invalide.');
+      }
+    }
+
+    // Le comportement par défaut : enregistrer la valeur
+    obj[prop] = valeur;
+
+    // On indique le succès de l'opération
+    return true;
+  }
+};
+
+let personne = new Proxy({}, validateur);
+
+personne.âge = 100;
+console.log(personne.âge); // 100
+personne.âge = 'jeune';    // lève une exception
+personne.âge = 300;        // lève une exception
+
+ +

Étendre un constructeur

+ +

En utilisant une fonction proxy, on peut étendre un constructeur avec un nouveau constructeur. Dans cet exemple, on utilise les gestionnaires correspondants à {{jsxref("Objets_globaux/Proxy/handler/construct","construct")}} et {{jsxref("Objets_globaux/Proxy/handler/apply","apply")}}.

+ +
function étendre(sup,base) {
+  var descripteur = Object.getOwnPropertyDescriptor(
+    base.prototype, "constructor"
+  );
+  base.prototype = Object.create(sup.prototype);
+  var gestionnaire = {
+    construct: function(cible, args) {
+      var obj = Object.create(base.prototype);
+      this.apply(cible,obj,args);
+      return obj;
+    },
+    apply: function(cible, that, args) {
+      sup.apply(that,args);
+      base.apply(that,args);
+    }
+  };
+  var proxy = new Proxy(base,gestionnaire);
+  descripteur.value = proxy;
+  Object.defineProperty(base.prototype, "constructor", descripteur);
+  return proxy;
+}
+
+var Personne = function(nom){
+  this.nom = nom;
+};
+
+var Garçon = étendre(Personne, function(nom, âge) {
+  this.âge = âge;
+});
+
+Garçon.prototype.genre = "M";
+
+var Pierre = new Garçon("Pierre", 13);
+console.log(Pierre.genre);  // "M"
+console.log(Pierre.nom);  // "Pierre"
+console.log(Pierre.âge);  // 13
+ +

Manipuler les nœuds DOM

+ +

Parfois, on veut passer un attribut ou un nom de classe entre deux éléments différents. Dans cet exemple, on utilise le gestionnaire lié à {{jsxref("Objets_globaux/Proxy/handler/set","set")}}.

+ +
let vue = new Proxy({
+  selected: null
+},
+{
+  set: function(obj, prop, nouvelleValeur) {
+    let ancienneValeur = obj[prop];
+
+    if (prop === 'selected') {
+      if (ancienneValeur) {
+        ancienneValeur.setAttribute('aria-selected', 'false');
+      }
+      if (nouvelleValeur) {
+        nouvelleValeur.setAttribute('aria-selected', 'true');
+      }
+    }
+
+    // Le comportement par défaut : enregistrer la valeur
+    obj[prop] = nouvelleValeur;
+
+    // On indique le succès de l'opération
+    return true;
+  }
+});
+
+let i1 = vue.selected = document.getElementById('item-1');
+console.log(i1.getAttribute('aria-selected')); // 'true'
+
+let i2 = vue.selected = document.getElementById('item-2');
+console.log(i1.getAttribute('aria-selected')); // 'false'
+console.log(i2.getAttribute('aria-selected')); // 'true'
+
+ +

Corriger une valeur et ajouter une propriété supplémentaire

+ +

Dans l'exemple qui suit, le proxy produits évalue la valeur passée et la convertit en tableau si besoin. L'objet supporte également la propriété supplémentaire dernierNavigateur à la fois comme accesseur et mutateur.

+ +
let produits = new Proxy({
+  navigateurs: ['Internet Explorer', 'Netscape']
+},
+{
+  get: function(obj, prop) {
+    // Une propriété supplémentaire
+    if (prop === 'dernierNavigateur') {
+      return obj.navigateurs[obj.navigateurs.length - 1];
+    }
+
+    // Le comportement par défaut : renvoyer la valeur
+    return obj[prop];
+  },
+  set: function(obj, prop, valeur) {
+    // Une propriété supplémentaire
+    if (prop === 'dernierNavigateur') {
+      obj.navigateurs.push(valeur);
+      return true;
+    }
+
+    // on convertit la valeur si ce n'est pas un tableau
+    if (typeof valeur === 'string') {
+      valeur = [valeur];
+    }
+
+    // Le comportement par défaut : enregistrer la valeur
+    obj[prop] = valeur;
+
+    // On indique le succès de l'opération
+    return true;
+  }
+});
+
+console.log(produits.navigateurs); // ['Internet Explorer', 'Netscape']
+produits.navigateurs = 'Firefox'; // on passe une chaîne
+console.log(produits.navigateurs); // ['Firefox'] <- pas de problème, elle est convertie en tableau
+
+produits.dernierNavigateur = 'Chrome';
+console.log(produits.navigateurs); // ['Firefox', 'Chrome']
+console.log(produits.dernierNavigateur); // 'Chrome'
+
+ +

Trouver un élément dans un tableau grâce à sa propriété

+ +

Dans cet exemple, ce proxy étend le tableau avec des fonctionnalités supplémentaires. Ici, on définit des propriétés sans utiliser {{jsxref("Objets_globaux/Object/defineProperties","Object.defineProperties")}}. Cet exemple pourrait être adapté pour trouver la ligne d'un tableau à partir d'une de ces cellules (la cible serait alors table.rows).

+ +
let produits = new Proxy([
+  { nom: 'Firefox', type: 'navigateur' },
+  { nom: 'SeaMonkey', type: 'navigateur' },
+  { nom: 'Thunderbird', type: 'client mail' }
+],
+{
+  get: function(obj, prop) {
+    // Le comportement par défaut : on renvoie la valeur
+    // prop est généralement un entier
+    if (prop in obj) {
+      return obj[prop];
+    }
+
+    // On obtient le nombre de produits
+    // un alias pour products.length
+    if (prop === 'nombre') {
+      return obj.length;
+    }
+
+    let résultat, types = {};
+
+    for (let produit of obj) {
+      if (produit.nom === prop) {
+        résultat = produit;
+      }
+      if (types[produit.type]) {
+        types[produit.type].push(produit);
+      } else {
+        types[produit.type] = [produit];
+      }
+    }
+
+    // Obtenir un produit grâce à un nom
+    if (résultat) {
+      return résultat;
+    }
+
+    // Obtenir un produit par type
+    if (prop in types) {
+      return types[prop];
+    }
+
+    // Obtenir les types de produits
+    if (prop === 'types') {
+      return Object.keys(types);
+    }
+
+    return undefined;
+  }
+});
+
+console.log(produits[0]); // { nom: 'Firefox', type: 'navigateur' }
+console.log(produits['Firefox']); // { nom: 'Firefox', type: 'navigateur' }
+console.log(produits['Chrome']); // undefined
+console.log(produits.navigateur); // [{ nom: 'Firefox', type: 'navigateur' }, { nom: 'SeaMonkey', type: 'navigateur' }]
+console.log(produits.types); // ['navigateur', 'client mail']
+console.log(produits.nombre); // 3
+
+ +

Un exemple avec toutes les trappes

+ +

Pour illustrer l'ensemble des trappes, on tente de « proxifier » un objet non natif : l'objet global docCookies créé grâce à cet exemple.

+ +
/*
+  var docCookies = ... définir l'objet "docCookies" grâce à
+  https://developer.mozilla.org/en-US/docs/DOM/document.cookie#A_little_framework.3A_a_complete_cookies_reader.2Fwriter_with_full_unicode_support
+*/
+
+var docCookies = new Proxy(docCookies, {
+  "get": function (oTarget, sKey) {
+    return oTarget[sKey] || oTarget.getItem(sKey) || undefined;
+  },
+  "set": function (oTarget, sKey, vValue) {
+    if (sKey in oTarget) { return false; }
+    return oTarget.setItem(sKey, vValue);
+  },
+  "deleteProperty": function (oTarget, sKey) {
+    if (sKey in oTarget) { return false; }
+    return oTarget.removeItem(sKey);
+  },
+  "enumerate": function (oTarget, sKey) {
+    return oTarget.keys();
+  },
+  "ownKeys": function (oTarget, sKey) {
+    return oTarget.keys();
+  },
+  "has": function (oTarget, sKey) {
+    return sKey in oTarget || oTarget.hasItem(sKey);
+  },
+  "defineProperty": function (oTarget, sKey, oDesc) {
+    if (oDesc && "value" in oDesc) { oTarget.setItem(sKey, oDesc.value); }
+    return oTarget;
+  },
+  "getOwnPropertyDescriptor": function (oTarget, sKey) {
+    var vValue = oTarget.getItem(sKey);
+    return vValue ? {
+      "value": vValue,
+      "writable": true,
+      "enumerable": true,
+      "configurable": false
+    } : undefined;
+  },
+});
+
+/* Cookies test */
+
+console.log(docCookies.mon_cookie1 = "Première valeur");
+console.log(docCookies.getItem("mon_cookie1"));
+
+docCookies.setItem("mon_cookie1", "Valeur modifiée");
+console.log(docCookies.mon_cookie1);
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-proxy-objects', 'Proxy')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ES2016', '#sec-proxy-objects', 'Proxy')}}{{Spec2('ES2016')}}
{{SpecName('ES2017', '#sec-proxy-objects', 'Proxy')}}{{Spec2('ES2017')}}
{{SpecName('ESDraft', '#sec-proxy-objects', 'Proxy')}}{{Spec2('ESDraft')}}
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Proxy", 2)}}

+ +

Voir aussi

+ + + +

Notes de licence

+ +

Certains composants de cette page (texte, exemples) ont été copiés ou adaptés du Wiki ECMAScript dont le contenu est sous licence CC 2.0 BY-NC-SA.

diff --git a/files/fr/web/javascript/reference/global_objects/proxy/proxy/apply/index.html b/files/fr/web/javascript/reference/global_objects/proxy/proxy/apply/index.html deleted file mode 100644 index 55606feb4e..0000000000 --- a/files/fr/web/javascript/reference/global_objects/proxy/proxy/apply/index.html +++ /dev/null @@ -1,115 +0,0 @@ ---- -title: handler.apply() -slug: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/apply -tags: - - ECMAScript 2015 - - JavaScript - - Méthode - - Proxy - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/apply -original_slug: Web/JavaScript/Reference/Objets_globaux/Proxy/handler/apply ---- -
{{JSRef}}
- -

La méthode handler.apply() représente une trappe pour un appel de fonctions.

- -
{{EmbedInteractiveExample("pages/js/proxyhandler-apply.html", "taller")}}
- -

Syntaxe

- -
var p = new Proxy(cible, {
-  apply: function(cible, thisArg, listeArguments) {
-  }
-});
-
- -

Paramètres

- -

Les paramètres suivants sont passés à la méthode apply. Ici, this est lié au gestionnaire.

- -
-
cible
-
L'objet cible.
-
thisArg
-
L'argument {{jsxref("Opérateurs/L_opérateur_this","this")}} pour cet appel.
-
listeArguments
-
La liste d'arguments pour l'appel.
-
- -

Valeur de retour

- -

La méthode apply peut renvoyer n'importe quelle valeur.

- -

Description

- -

La méthode handler.apply est une trappe pour l'appel à une fonction.

- -

Interceptions

- -

Cette trappe intercepte les opérations suivantes :

- - - -

Invariants

- -

Si les invariants suivants ne sont pas respectés, le proxy lèvera une exception TypeError :

- - - -

Exemples

- -

Dans l'exemple ci-dessous, on piège un appel de fonction.

- -
var p = new Proxy(function() {}, {
-  apply: function(target, thisArg, argumentsList) {
-    console.log("called: " + argumentsList.join(", "));
-    return argumentsList[0] + argumentsList[1] + argumentsList[2];
-  }
-});
-
-console.log(p(1, 2, 3)); // "called: 1, 2, 3"
-                         // 6
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-proxy-object-internal-methods-and-internal-slots-call-thisargument-argumentslist', '[[Call]]')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-proxy-object-internal-methods-and-internal-slots-call-thisargument-argumentslist', '[[Call]]')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Proxy.handler.apply")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/proxy/proxy/apply/index.md b/files/fr/web/javascript/reference/global_objects/proxy/proxy/apply/index.md new file mode 100644 index 0000000000..55606feb4e --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/proxy/proxy/apply/index.md @@ -0,0 +1,115 @@ +--- +title: handler.apply() +slug: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/apply +tags: + - ECMAScript 2015 + - JavaScript + - Méthode + - Proxy + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/apply +original_slug: Web/JavaScript/Reference/Objets_globaux/Proxy/handler/apply +--- +
{{JSRef}}
+ +

La méthode handler.apply() représente une trappe pour un appel de fonctions.

+ +
{{EmbedInteractiveExample("pages/js/proxyhandler-apply.html", "taller")}}
+ +

Syntaxe

+ +
var p = new Proxy(cible, {
+  apply: function(cible, thisArg, listeArguments) {
+  }
+});
+
+ +

Paramètres

+ +

Les paramètres suivants sont passés à la méthode apply. Ici, this est lié au gestionnaire.

+ +
+
cible
+
L'objet cible.
+
thisArg
+
L'argument {{jsxref("Opérateurs/L_opérateur_this","this")}} pour cet appel.
+
listeArguments
+
La liste d'arguments pour l'appel.
+
+ +

Valeur de retour

+ +

La méthode apply peut renvoyer n'importe quelle valeur.

+ +

Description

+ +

La méthode handler.apply est une trappe pour l'appel à une fonction.

+ +

Interceptions

+ +

Cette trappe intercepte les opérations suivantes :

+ + + +

Invariants

+ +

Si les invariants suivants ne sont pas respectés, le proxy lèvera une exception TypeError :

+ + + +

Exemples

+ +

Dans l'exemple ci-dessous, on piège un appel de fonction.

+ +
var p = new Proxy(function() {}, {
+  apply: function(target, thisArg, argumentsList) {
+    console.log("called: " + argumentsList.join(", "));
+    return argumentsList[0] + argumentsList[1] + argumentsList[2];
+  }
+});
+
+console.log(p(1, 2, 3)); // "called: 1, 2, 3"
+                         // 6
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-proxy-object-internal-methods-and-internal-slots-call-thisargument-argumentslist', '[[Call]]')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-proxy-object-internal-methods-and-internal-slots-call-thisargument-argumentslist', '[[Call]]')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Proxy.handler.apply")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/proxy/proxy/construct/index.html b/files/fr/web/javascript/reference/global_objects/proxy/proxy/construct/index.html deleted file mode 100644 index dcb569142e..0000000000 --- a/files/fr/web/javascript/reference/global_objects/proxy/proxy/construct/index.html +++ /dev/null @@ -1,134 +0,0 @@ ---- -title: handler.construct() -slug: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/construct -tags: - - ECMAScript 2015 - - JavaScript - - Méthode - - Proxy - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/construct -original_slug: Web/JavaScript/Reference/Objets_globaux/Proxy/handler/construct ---- -
{{JSRef}}
- -

La méthode handler.construct() est une trappe pour l'opérateur {{jsxref("Opérateurs/L_opérateur_new", "new")}}. Afin que l'opération new puisse être valide sur le proxy correspondant, la cible utilisée doit avoir une méthode interne [[Construct]] (autrement dit, l'instruction new cible doit être valide).

- -
{{EmbedInteractiveExample("pages/js/proxyhandler-construct.html", "taller")}}
- -

Syntaxe

- -
var p = new Proxy(cible, {
-  construct: function(cible, listeArguments, newTarget) {
-  }
-});
-
- -

Paramètres

- -

Les paramètres suivants sont passés à la méthode constructthis est ici lié au gestionnaire (handler).

- -
-
cible
-
L'objet cible.
-
listeArguments
-
La liste des arguments passés au constructeur.
-
newTarget
-
Le constructeur originellement appelé.
-
- -

Valeur de retour

- -

La méthode construct doit renvoyer un objet.

- -

Description

- -

La méthode handler.construct() est une trappe pour l'opérateur {{jsxref("Opérateurs/L_opérateur_new", "new")}}.

- -

Interceptions

- -

Ce trappe intercepte les opérations suivantes :

- - - -

Invariants

- -

Si les invariants suivants ne sont pas respectés, le proxy renverra une exception {{jsxref("TypeError")}} :

- - - -

Exemples

- -

Dans l'exemple qui suit, on piège l'opérateur {{jsxref("Opérateurs/L_opérateur_new", "new")}}.

- -
var p = new Proxy(function() {}, {
-  construct: function(target, argumentsList) {
-    console.log("called: " + argumentsList.join(", "));
-    return { value: argumentsList[0] * 10 };
-  }
-});
-
-console.log(new p(1).value); // "appel sur : 1"
-                             // 10
-
- -

Dans cette version, on ne respecte pas la contrainte d'invariance :

- -
var p = new Proxy(function() {}, {
-  construct: function(target, argumentsList) {
-    return 1;
-  }
-});
-
-new p(); // Une exception TypeError est levée
-
- -

Dans le code qui suit, le proxy n'est pas correctement initialisé. La cible du proxy doit être un constructeur valide qui puisse être utilisé avec new.

- -
var p = new Proxy({}, {
-  construct: function(target, argumentsList, newTarget){
-    return {};
-  }
-});
-
-new p(); // TypeError: p is not a constructor
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-proxy-object-internal-methods-and-internal-slots-construct-argumentslist-newtarget', '[[Construct]]')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-proxy-object-internal-methods-and-internal-slots-construct-argumentslist-newtarget', '[[Construct]]')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Proxy.handler.construct")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/proxy/proxy/construct/index.md b/files/fr/web/javascript/reference/global_objects/proxy/proxy/construct/index.md new file mode 100644 index 0000000000..dcb569142e --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/proxy/proxy/construct/index.md @@ -0,0 +1,134 @@ +--- +title: handler.construct() +slug: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/construct +tags: + - ECMAScript 2015 + - JavaScript + - Méthode + - Proxy + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/construct +original_slug: Web/JavaScript/Reference/Objets_globaux/Proxy/handler/construct +--- +
{{JSRef}}
+ +

La méthode handler.construct() est une trappe pour l'opérateur {{jsxref("Opérateurs/L_opérateur_new", "new")}}. Afin que l'opération new puisse être valide sur le proxy correspondant, la cible utilisée doit avoir une méthode interne [[Construct]] (autrement dit, l'instruction new cible doit être valide).

+ +
{{EmbedInteractiveExample("pages/js/proxyhandler-construct.html", "taller")}}
+ +

Syntaxe

+ +
var p = new Proxy(cible, {
+  construct: function(cible, listeArguments, newTarget) {
+  }
+});
+
+ +

Paramètres

+ +

Les paramètres suivants sont passés à la méthode constructthis est ici lié au gestionnaire (handler).

+ +
+
cible
+
L'objet cible.
+
listeArguments
+
La liste des arguments passés au constructeur.
+
newTarget
+
Le constructeur originellement appelé.
+
+ +

Valeur de retour

+ +

La méthode construct doit renvoyer un objet.

+ +

Description

+ +

La méthode handler.construct() est une trappe pour l'opérateur {{jsxref("Opérateurs/L_opérateur_new", "new")}}.

+ +

Interceptions

+ +

Ce trappe intercepte les opérations suivantes :

+ + + +

Invariants

+ +

Si les invariants suivants ne sont pas respectés, le proxy renverra une exception {{jsxref("TypeError")}} :

+ + + +

Exemples

+ +

Dans l'exemple qui suit, on piège l'opérateur {{jsxref("Opérateurs/L_opérateur_new", "new")}}.

+ +
var p = new Proxy(function() {}, {
+  construct: function(target, argumentsList) {
+    console.log("called: " + argumentsList.join(", "));
+    return { value: argumentsList[0] * 10 };
+  }
+});
+
+console.log(new p(1).value); // "appel sur : 1"
+                             // 10
+
+ +

Dans cette version, on ne respecte pas la contrainte d'invariance :

+ +
var p = new Proxy(function() {}, {
+  construct: function(target, argumentsList) {
+    return 1;
+  }
+});
+
+new p(); // Une exception TypeError est levée
+
+ +

Dans le code qui suit, le proxy n'est pas correctement initialisé. La cible du proxy doit être un constructeur valide qui puisse être utilisé avec new.

+ +
var p = new Proxy({}, {
+  construct: function(target, argumentsList, newTarget){
+    return {};
+  }
+});
+
+new p(); // TypeError: p is not a constructor
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-proxy-object-internal-methods-and-internal-slots-construct-argumentslist-newtarget', '[[Construct]]')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-proxy-object-internal-methods-and-internal-slots-construct-argumentslist-newtarget', '[[Construct]]')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Proxy.handler.construct")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/proxy/proxy/defineproperty/index.html b/files/fr/web/javascript/reference/global_objects/proxy/proxy/defineproperty/index.html deleted file mode 100644 index f5bdab1aa2..0000000000 --- a/files/fr/web/javascript/reference/global_objects/proxy/proxy/defineproperty/index.html +++ /dev/null @@ -1,141 +0,0 @@ ---- -title: handler.defineProperty() -slug: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/defineProperty -tags: - - ECMAScript 2015 - - JavaScript - - Méthode - - Proxy - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/defineProperty -original_slug: Web/JavaScript/Reference/Objets_globaux/Proxy/handler/defineProperty ---- -
{{JSRef}}
- -

La méthode handler.defineProperty() est une trappe pour {{jsxref("Object.defineProperty()")}}.

- -
{{EmbedInteractiveExample("pages/js/proxyhandler-defineproperty.html", "taller")}}
- -

Syntaxe

- -
var p = new Proxy(cible, {
-  defineProperty: function(cible, propriété, descripteur) {
-  }
-});
-
- -

Paramètres

- -

Les paramètres suivants sont passés à la méthode defineProperty. this est ici lié au gestionnaire.

- -
-
cible
-
L'objet cible.
-
propriété
-
Le nom ou le symbole ({{jsxref("Symbol")}}) de la propriété dont on veut modifier la description.
-
descripteur
-
Le descripteur de la propriété qui est à modifier ou à définir.
-
- -

Valeur de retour

- -

La méthode defineProperty() doit renvoyer un booléen qui indique si la propriété a correctement été définie sur la cible.

- -

Description

- -

La méthode handler.defineProperty() est une trappe pour {{jsxref("Object.defineProperty()")}}.

- -

Interceptions

- -

Cette trappe intercepte les opérations suivantes :

- - - -

Invariants

- -

Si les contraintes d'invariances suivantes ne sont pas respectées, le proxy renverra une exception {{jsxref("TypeError")}} :

- - - -

Exemples

- -

Dans le code suivant, on piège l'appel à {{jsxref("Object.defineProperty()")}}.

- -
var p = new Proxy({}, {
-  defineProperty: function(target, prop, descriptor) {
-    console.log("appelé avec : " + prop);
-  }
-});
-
-var desc = { configurable: true, enumerable: true, value: 10 };
-Object.defineProperty(p, "a", desc); // "appelé avec : a"
-
- -

Lorsqu'on appelle {{jsxref("Object.defineProperty()")}} ou {{jsxref("Reflect.defineProperty()")}}, le descripteur passé à la trappe defineProperty doit respecter une contrainte : seules les propriétés suivants sont utilisables, les propriétés non-standards seront ignorées :

- - - -
var p = new Proxy({}, {
-  defineProperty(target, prop, descriptor) {
-    console.log(descriptor);
-    return Reflect.defineProperty(target, prop, descriptor);
-  }
-});
-
-Object.defineProperty(p, "name, {
-  value: "proxy",
-  type: "custom"
-});
-// { value: "proxy" }
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-proxy-object-internal-methods-and-internal-slots-defineownproperty-p-desc', '[[DefineOwnProperty]]')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-proxy-object-internal-methods-and-internal-slots-defineownproperty-p-desc', '[[DefineOwnProperty]]')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Proxy.handler.defineProperty")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/proxy/proxy/defineproperty/index.md b/files/fr/web/javascript/reference/global_objects/proxy/proxy/defineproperty/index.md new file mode 100644 index 0000000000..f5bdab1aa2 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/proxy/proxy/defineproperty/index.md @@ -0,0 +1,141 @@ +--- +title: handler.defineProperty() +slug: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/defineProperty +tags: + - ECMAScript 2015 + - JavaScript + - Méthode + - Proxy + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/defineProperty +original_slug: Web/JavaScript/Reference/Objets_globaux/Proxy/handler/defineProperty +--- +
{{JSRef}}
+ +

La méthode handler.defineProperty() est une trappe pour {{jsxref("Object.defineProperty()")}}.

+ +
{{EmbedInteractiveExample("pages/js/proxyhandler-defineproperty.html", "taller")}}
+ +

Syntaxe

+ +
var p = new Proxy(cible, {
+  defineProperty: function(cible, propriété, descripteur) {
+  }
+});
+
+ +

Paramètres

+ +

Les paramètres suivants sont passés à la méthode defineProperty. this est ici lié au gestionnaire.

+ +
+
cible
+
L'objet cible.
+
propriété
+
Le nom ou le symbole ({{jsxref("Symbol")}}) de la propriété dont on veut modifier la description.
+
descripteur
+
Le descripteur de la propriété qui est à modifier ou à définir.
+
+ +

Valeur de retour

+ +

La méthode defineProperty() doit renvoyer un booléen qui indique si la propriété a correctement été définie sur la cible.

+ +

Description

+ +

La méthode handler.defineProperty() est une trappe pour {{jsxref("Object.defineProperty()")}}.

+ +

Interceptions

+ +

Cette trappe intercepte les opérations suivantes :

+ + + +

Invariants

+ +

Si les contraintes d'invariances suivantes ne sont pas respectées, le proxy renverra une exception {{jsxref("TypeError")}} :

+ + + +

Exemples

+ +

Dans le code suivant, on piège l'appel à {{jsxref("Object.defineProperty()")}}.

+ +
var p = new Proxy({}, {
+  defineProperty: function(target, prop, descriptor) {
+    console.log("appelé avec : " + prop);
+  }
+});
+
+var desc = { configurable: true, enumerable: true, value: 10 };
+Object.defineProperty(p, "a", desc); // "appelé avec : a"
+
+ +

Lorsqu'on appelle {{jsxref("Object.defineProperty()")}} ou {{jsxref("Reflect.defineProperty()")}}, le descripteur passé à la trappe defineProperty doit respecter une contrainte : seules les propriétés suivants sont utilisables, les propriétés non-standards seront ignorées :

+ + + +
var p = new Proxy({}, {
+  defineProperty(target, prop, descriptor) {
+    console.log(descriptor);
+    return Reflect.defineProperty(target, prop, descriptor);
+  }
+});
+
+Object.defineProperty(p, "name, {
+  value: "proxy",
+  type: "custom"
+});
+// { value: "proxy" }
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-proxy-object-internal-methods-and-internal-slots-defineownproperty-p-desc', '[[DefineOwnProperty]]')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-proxy-object-internal-methods-and-internal-slots-defineownproperty-p-desc', '[[DefineOwnProperty]]')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Proxy.handler.defineProperty")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/proxy/proxy/deleteproperty/index.html b/files/fr/web/javascript/reference/global_objects/proxy/proxy/deleteproperty/index.html deleted file mode 100644 index 517b27ca31..0000000000 --- a/files/fr/web/javascript/reference/global_objects/proxy/proxy/deleteproperty/index.html +++ /dev/null @@ -1,110 +0,0 @@ ---- -title: handler.deleteProperty() -slug: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/deleteProperty -tags: - - ECMAScript 2015 - - JavaScript - - Méthode - - Proxy - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/deleteProperty -original_slug: Web/JavaScript/Reference/Objets_globaux/Proxy/handler/deleteProperty ---- -
{{JSRef}}
- -

La méthode handler.deleteProperty() est une trappe pour l'opérateur {{jsxref("Opérateurs/L_opérateur_delete", "delete")}}.

- -
{{EmbedInteractiveExample("pages/js/proxyhandler-deleteproperty.html","taller")}}
- -

Syntaxe

- -
var p = new Proxy(cible, {
-  deleteProperty: function(cible, propriété) {
-  }
-});
-
- -

Paramètres

- -

Les paramètres suivants sont passés à la méthode deleteProperty. this est lié au gestionnaire.

- -
-
cible
-
L'objet cible.
-
propriété
-
Le nom ou le symbole ({{jsxref("Symbol")}}) de la propriété à supprimer.
-
- -

Valeur de retour

- -

La méthode deleteProperty() doit renvoyer un booléen qui indique si oui ou non la propriété a été supprimée.

- -

Description

- -

La méthode handler.deleteProperty() est une trappe permettant d'intercepter les opérations de l'opérateur {{jsxref("Opérateurs/L_opérateur_delete", "delete")}}.

- -

Interceptions

- -

Cette trappe peut intercepter les opérations suivantes :

- - - -

Invariants

- -

Si les invarians suivants ne sont pas respectés, le proxy renverra une exception {{jsxref("TypeError")}} :

- - - -

Exemples

- -

Dans l'exemple qui suit, on intercepte les opérations de {{jsxref("Opérateurs/L_opérateur_delete", "delete")}}.

- -
var p = new Proxy({}, {
-  deleteProperty: function(cible, prop) {
-    console.log("appelée sur : " + prop);
-    return true;
-  }
-});
-
-delete p.a; // "appelée sur : a"
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-proxy-object-internal-methods-and-internal-slots-delete-p', '[[Delete]]')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-proxy-object-internal-methods-and-internal-slots-delete-p', '[[Delete]]')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Proxy.handler.deleteProperty")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/proxy/proxy/deleteproperty/index.md b/files/fr/web/javascript/reference/global_objects/proxy/proxy/deleteproperty/index.md new file mode 100644 index 0000000000..517b27ca31 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/proxy/proxy/deleteproperty/index.md @@ -0,0 +1,110 @@ +--- +title: handler.deleteProperty() +slug: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/deleteProperty +tags: + - ECMAScript 2015 + - JavaScript + - Méthode + - Proxy + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/deleteProperty +original_slug: Web/JavaScript/Reference/Objets_globaux/Proxy/handler/deleteProperty +--- +
{{JSRef}}
+ +

La méthode handler.deleteProperty() est une trappe pour l'opérateur {{jsxref("Opérateurs/L_opérateur_delete", "delete")}}.

+ +
{{EmbedInteractiveExample("pages/js/proxyhandler-deleteproperty.html","taller")}}
+ +

Syntaxe

+ +
var p = new Proxy(cible, {
+  deleteProperty: function(cible, propriété) {
+  }
+});
+
+ +

Paramètres

+ +

Les paramètres suivants sont passés à la méthode deleteProperty. this est lié au gestionnaire.

+ +
+
cible
+
L'objet cible.
+
propriété
+
Le nom ou le symbole ({{jsxref("Symbol")}}) de la propriété à supprimer.
+
+ +

Valeur de retour

+ +

La méthode deleteProperty() doit renvoyer un booléen qui indique si oui ou non la propriété a été supprimée.

+ +

Description

+ +

La méthode handler.deleteProperty() est une trappe permettant d'intercepter les opérations de l'opérateur {{jsxref("Opérateurs/L_opérateur_delete", "delete")}}.

+ +

Interceptions

+ +

Cette trappe peut intercepter les opérations suivantes :

+ + + +

Invariants

+ +

Si les invarians suivants ne sont pas respectés, le proxy renverra une exception {{jsxref("TypeError")}} :

+ + + +

Exemples

+ +

Dans l'exemple qui suit, on intercepte les opérations de {{jsxref("Opérateurs/L_opérateur_delete", "delete")}}.

+ +
var p = new Proxy({}, {
+  deleteProperty: function(cible, prop) {
+    console.log("appelée sur : " + prop);
+    return true;
+  }
+});
+
+delete p.a; // "appelée sur : a"
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-proxy-object-internal-methods-and-internal-slots-delete-p', '[[Delete]]')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-proxy-object-internal-methods-and-internal-slots-delete-p', '[[Delete]]')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Proxy.handler.deleteProperty")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/proxy/proxy/get/index.html b/files/fr/web/javascript/reference/global_objects/proxy/proxy/get/index.html deleted file mode 100644 index e8c3fa93d2..0000000000 --- a/files/fr/web/javascript/reference/global_objects/proxy/proxy/get/index.html +++ /dev/null @@ -1,133 +0,0 @@ ---- -title: handler.get() -slug: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/get -tags: - - ECMAScript 2015 - - JavaScript - - Méthode - - Proxy - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/get -original_slug: Web/JavaScript/Reference/Objets_globaux/Proxy/handler/get ---- -
{{JSRef}}
- -

La méthode handler.get() est une trappe pour intercepter l'accès à la valeur d'une propriété.

- -
{{EmbedInteractiveExample("pages/js/proxyhandler-get.html", "taller")}}
- -

Syntaxe

- -
var p = new Proxy(cible, {
-  get: function(cible, propriété, récepteur) {
-  }
-});
-
- -

Paramètres

- -

Les paramètres suivants sont passés à la méthode get. this est lié au gestionnaire.

- -
-
cible
-
L'objet cible.
-
propriété
-
Le nom ou le symbole ({{jsxref("Symbol")}}) de la propriété qu'on souhaite obtenir.
-
récepteur
-
Le proxy ou un objet qui hérite du proxy.
-
- -

Valeur de retour

- -

La méthode get peut renvoyer n'importe quelle valeur.

- -

Description

- -

La méthode handler.get est une trappe pour intercepter l'accès à une propriété.

- -

Interceptions

- -

Cette trappe permet d'intercepter les opérations suivantes :

- - - -

Invariants

- -

Si les invariants suivants ne sont pas respectés, le proxy renverra une exception {{jsxref("TypeError")}} :

- - - -

Exemples

- -

Dans l'exemple suivant, on intercepte les accès aux propriétés :

- -
var p = new Proxy({}, {
-  get: function(cible, propriété, récepteur) {
-    console.log("appelée : " + propriété);
-    return 10;
-  }
-});
-
-console.log(p.a); // "appelée : a"
-                  // 10
-
- -

Le code suivant ne respecte pas l'invariant :

- -
var obj = {};
-Object.defineProperty(obj, "a", {
-  configurable: false,
-  enumerable: false,
-  value: 10,
-  writable: false
-});
-
-var p = new Proxy(obj, {
-  get: function(cible, propriété) {
-    return 20;
-  }
-});
-
-p.a; // exception TypeError levée
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-proxy-object-internal-methods-and-internal-slots-get-p-receiver', '[[Get]]')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-proxy-object-internal-methods-and-internal-slots-get-p-receiver', '[[Get]]')}}{{Spec2('ESDraft')}} 
- -

Compatiblité des navigateurs

- -

{{Compat("javascript.builtins.Proxy.handler.get")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/proxy/proxy/get/index.md b/files/fr/web/javascript/reference/global_objects/proxy/proxy/get/index.md new file mode 100644 index 0000000000..e8c3fa93d2 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/proxy/proxy/get/index.md @@ -0,0 +1,133 @@ +--- +title: handler.get() +slug: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/get +tags: + - ECMAScript 2015 + - JavaScript + - Méthode + - Proxy + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/get +original_slug: Web/JavaScript/Reference/Objets_globaux/Proxy/handler/get +--- +
{{JSRef}}
+ +

La méthode handler.get() est une trappe pour intercepter l'accès à la valeur d'une propriété.

+ +
{{EmbedInteractiveExample("pages/js/proxyhandler-get.html", "taller")}}
+ +

Syntaxe

+ +
var p = new Proxy(cible, {
+  get: function(cible, propriété, récepteur) {
+  }
+});
+
+ +

Paramètres

+ +

Les paramètres suivants sont passés à la méthode get. this est lié au gestionnaire.

+ +
+
cible
+
L'objet cible.
+
propriété
+
Le nom ou le symbole ({{jsxref("Symbol")}}) de la propriété qu'on souhaite obtenir.
+
récepteur
+
Le proxy ou un objet qui hérite du proxy.
+
+ +

Valeur de retour

+ +

La méthode get peut renvoyer n'importe quelle valeur.

+ +

Description

+ +

La méthode handler.get est une trappe pour intercepter l'accès à une propriété.

+ +

Interceptions

+ +

Cette trappe permet d'intercepter les opérations suivantes :

+ + + +

Invariants

+ +

Si les invariants suivants ne sont pas respectés, le proxy renverra une exception {{jsxref("TypeError")}} :

+ + + +

Exemples

+ +

Dans l'exemple suivant, on intercepte les accès aux propriétés :

+ +
var p = new Proxy({}, {
+  get: function(cible, propriété, récepteur) {
+    console.log("appelée : " + propriété);
+    return 10;
+  }
+});
+
+console.log(p.a); // "appelée : a"
+                  // 10
+
+ +

Le code suivant ne respecte pas l'invariant :

+ +
var obj = {};
+Object.defineProperty(obj, "a", {
+  configurable: false,
+  enumerable: false,
+  value: 10,
+  writable: false
+});
+
+var p = new Proxy(obj, {
+  get: function(cible, propriété) {
+    return 20;
+  }
+});
+
+p.a; // exception TypeError levée
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-proxy-object-internal-methods-and-internal-slots-get-p-receiver', '[[Get]]')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-proxy-object-internal-methods-and-internal-slots-get-p-receiver', '[[Get]]')}}{{Spec2('ESDraft')}} 
+ +

Compatiblité des navigateurs

+ +

{{Compat("javascript.builtins.Proxy.handler.get")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/proxy/proxy/getownpropertydescriptor/index.html b/files/fr/web/javascript/reference/global_objects/proxy/proxy/getownpropertydescriptor/index.html deleted file mode 100644 index 06de12e833..0000000000 --- a/files/fr/web/javascript/reference/global_objects/proxy/proxy/getownpropertydescriptor/index.html +++ /dev/null @@ -1,129 +0,0 @@ ---- -title: handler.getOwnPropertyDescriptor() -slug: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/getOwnPropertyDescriptor -tags: - - ECMAScript 2015 - - JavaScript - - Méthode - - Proxy - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/getOwnPropertyDescriptor -original_slug: Web/JavaScript/Reference/Objets_globaux/Proxy/handler/getOwnPropertyDescriptor ---- -
{{JSRef}}
- -

La méthode handler.getOwnPropertyDescriptor() est une trappe pour intercepter {{jsxref("Object.getOwnPropertyDescriptor()")}}.

- -
{{EmbedInteractiveExample("pages/js/proxyhandler-getownpropertydescriptor.html", "taller")}}
- -

Syntaxe

- -
var p = new Proxy(cible, {
-  getOwnPropertyDescriptor: function(cible, prop) {
-  }
-});
-
- -

Paramètres

- -

Les paramètres suivants sont passés à la méthode getOwnPropertyDescriptor. this est ici lié au gestionnaire (handler).

- -
-
cible
-
L'objet cible
-
prop
-
Le nom de la propriété dont on souhaite obtenir le descripteur.
-
- -

Valeur de retour

- -

La méthode getOwnPropertyDescriptor doit renvoyer un objet ou undefined.

- -

Description

- -

La méthode handler.getOwnPropertyDescriptor() est une trappe pour un proxy afin d'intercepter les opérations effectuées avec {{jsxref("Object.getOwnPropertyDescriptor()")}}.

- -

Interceptions

- -

Cette trappe permet d'intercepter :

- - - -

Invariants

- -

Si les invariants suivants ne sont pas respectés, le proxy lèvera une exception {{jsxref("TypeError")}} :

- - - -

Exemples

- -

Dans l'exemple qui suit, on intercepte {{jsxref("Object.getOwnPropertyDescriptor()")}}.

- -
var p = new Proxy({ a: 20 }, {
-  getOwnPropertyDescriptor: function(cible, prop) {
-    console.log("appelée : " + prop);
-    return { configurable: true, enumerable: true, value: 10 };
-  }
-});
-
-console.log(Object.getOwnPropertyDescriptor(p, "a").value); // "appelée : a"
-                                                            // 10
-
- -

L'exemple suivant ne respecte pas un invariant :

- -
var obj = { a: 10 };
-Object.preventExtensions(obj);
-var p = new Proxy(obj, {
-  getOwnPropertyDescriptor: function(cible, prop) {
-    return undefined;
-  }
-});
-
-Object.getOwnPropertyDescriptor(p, "a"); // Une exception TypeError est renvoyée
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-proxy-object-internal-methods-and-internal-slots-getownproperty-p', '[[GetOwnProperty]]')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-proxy-object-internal-methods-and-internal-slots-getownproperty-p', '[[GetOwnProperty]]')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Proxy.handler.getOwnPropertyDescriptor")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/proxy/proxy/getownpropertydescriptor/index.md b/files/fr/web/javascript/reference/global_objects/proxy/proxy/getownpropertydescriptor/index.md new file mode 100644 index 0000000000..06de12e833 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/proxy/proxy/getownpropertydescriptor/index.md @@ -0,0 +1,129 @@ +--- +title: handler.getOwnPropertyDescriptor() +slug: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/getOwnPropertyDescriptor +tags: + - ECMAScript 2015 + - JavaScript + - Méthode + - Proxy + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/getOwnPropertyDescriptor +original_slug: Web/JavaScript/Reference/Objets_globaux/Proxy/handler/getOwnPropertyDescriptor +--- +
{{JSRef}}
+ +

La méthode handler.getOwnPropertyDescriptor() est une trappe pour intercepter {{jsxref("Object.getOwnPropertyDescriptor()")}}.

+ +
{{EmbedInteractiveExample("pages/js/proxyhandler-getownpropertydescriptor.html", "taller")}}
+ +

Syntaxe

+ +
var p = new Proxy(cible, {
+  getOwnPropertyDescriptor: function(cible, prop) {
+  }
+});
+
+ +

Paramètres

+ +

Les paramètres suivants sont passés à la méthode getOwnPropertyDescriptor. this est ici lié au gestionnaire (handler).

+ +
+
cible
+
L'objet cible
+
prop
+
Le nom de la propriété dont on souhaite obtenir le descripteur.
+
+ +

Valeur de retour

+ +

La méthode getOwnPropertyDescriptor doit renvoyer un objet ou undefined.

+ +

Description

+ +

La méthode handler.getOwnPropertyDescriptor() est une trappe pour un proxy afin d'intercepter les opérations effectuées avec {{jsxref("Object.getOwnPropertyDescriptor()")}}.

+ +

Interceptions

+ +

Cette trappe permet d'intercepter :

+ + + +

Invariants

+ +

Si les invariants suivants ne sont pas respectés, le proxy lèvera une exception {{jsxref("TypeError")}} :

+ + + +

Exemples

+ +

Dans l'exemple qui suit, on intercepte {{jsxref("Object.getOwnPropertyDescriptor()")}}.

+ +
var p = new Proxy({ a: 20 }, {
+  getOwnPropertyDescriptor: function(cible, prop) {
+    console.log("appelée : " + prop);
+    return { configurable: true, enumerable: true, value: 10 };
+  }
+});
+
+console.log(Object.getOwnPropertyDescriptor(p, "a").value); // "appelée : a"
+                                                            // 10
+
+ +

L'exemple suivant ne respecte pas un invariant :

+ +
var obj = { a: 10 };
+Object.preventExtensions(obj);
+var p = new Proxy(obj, {
+  getOwnPropertyDescriptor: function(cible, prop) {
+    return undefined;
+  }
+});
+
+Object.getOwnPropertyDescriptor(p, "a"); // Une exception TypeError est renvoyée
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-proxy-object-internal-methods-and-internal-slots-getownproperty-p', '[[GetOwnProperty]]')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-proxy-object-internal-methods-and-internal-slots-getownproperty-p', '[[GetOwnProperty]]')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Proxy.handler.getOwnPropertyDescriptor")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/proxy/proxy/getprototypeof/index.html b/files/fr/web/javascript/reference/global_objects/proxy/proxy/getprototypeof/index.html deleted file mode 100644 index 8df39ee357..0000000000 --- a/files/fr/web/javascript/reference/global_objects/proxy/proxy/getprototypeof/index.html +++ /dev/null @@ -1,151 +0,0 @@ ---- -title: handler.getPrototypeOf() -slug: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/getPrototypeOf -tags: - - ECMAScript 2015 - - JavaScript - - Méthode - - Proxy - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/getPrototypeOf -original_slug: Web/JavaScript/Reference/Objets_globaux/Proxy/handler/getPrototypeOf ---- -
{{JSRef}}
- -

La méthode handler.getPrototypeOf() représente une trappe pour la méthode interne [[GetPrototypeOf]].

- -
{{EmbedInteractiveExample("pages/js/proxyhandler-getprototypeof.html", "taller")}}
- -

Syntaxe

- -
var p = new Proxy(obj, {
-  getPrototypeOf(cible) {
-  ...
-  }
-});
-
- -

Paramètres

- -

Le paramètre suivant est passé à la méthode getPrototypeOf. this est lié au gestionnaire.

- -
-
cible
-
L'objet cible.
-
- -

Valeur de retour

- -

La méthode getPrototypeOf doit renvoyer un objet ou null.

- -

Description

- -

Interceptions

- -

Cette trappe permet d'intercepter les opérations suivantes :

- - - -

Invariants

- -

Si les invariants suivant ne sont pas respectés, le proxy renverra une exception {{jsxref("TypeError")}} :

- - - -

Exemples

- -

Utilisation simple

- -
var obj = {};
-var proto = {};
-var gestionnaire = {
-    getPrototypeOf(cible) {
-        console.log(cible === obj);   // true
-        console.log(this === gestionnaire); // true
-        return proto;
-    }
-};
-
-var p = new Proxy(obj, gestionnaire);
-console.log(Object.getPrototypeOf(p) === proto);    // true
-
- -

Cinq façons de déclencher la trappe getPrototypeOf

- -
var obj = {};
-var p = new Proxy(obj, {
-    getPrototypeOf(cible) {
-        return Array.prototype;
-    }
-});
-console.log(
-    Object.getPrototypeOf(p) === Array.prototype,  // true
-    Reflect.getPrototypeOf(p) === Array.prototype, // true
-    p.__proto__ === Array.prototype,               // true
-    Array.prototype.isPrototypeOf(p),              // true
-    p instanceof Array                             // true
-);
-
- -

Deux types d'exceptions

- -
var obj = {};
-var p = new Proxy(obj, {
-    getPrototypeOf(cible) {
-        return "toto";
-    }
-});
-Object.getPrototypeOf(p); // TypeError : "toto" n'est pas un objet ou null
-
-var obj = Object.preventExtensions({});
-var p = new Proxy(obj, {
-    getPrototypeOf(cible) {
-        return {};
-    }
-});
-Object.getPrototypeOf(p); // TypeError : on attend la même valeur pour le prototype
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-proxy-object-internal-methods-and-internal-slots-getprototypeof', '[[GetPrototypeOf]]')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-proxy-object-internal-methods-and-internal-slots-getprototypeof', '[[GetPrototypeOf]]')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Proxy.handler.getPrototypeOf")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/proxy/proxy/getprototypeof/index.md b/files/fr/web/javascript/reference/global_objects/proxy/proxy/getprototypeof/index.md new file mode 100644 index 0000000000..8df39ee357 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/proxy/proxy/getprototypeof/index.md @@ -0,0 +1,151 @@ +--- +title: handler.getPrototypeOf() +slug: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/getPrototypeOf +tags: + - ECMAScript 2015 + - JavaScript + - Méthode + - Proxy + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/getPrototypeOf +original_slug: Web/JavaScript/Reference/Objets_globaux/Proxy/handler/getPrototypeOf +--- +
{{JSRef}}
+ +

La méthode handler.getPrototypeOf() représente une trappe pour la méthode interne [[GetPrototypeOf]].

+ +
{{EmbedInteractiveExample("pages/js/proxyhandler-getprototypeof.html", "taller")}}
+ +

Syntaxe

+ +
var p = new Proxy(obj, {
+  getPrototypeOf(cible) {
+  ...
+  }
+});
+
+ +

Paramètres

+ +

Le paramètre suivant est passé à la méthode getPrototypeOf. this est lié au gestionnaire.

+ +
+
cible
+
L'objet cible.
+
+ +

Valeur de retour

+ +

La méthode getPrototypeOf doit renvoyer un objet ou null.

+ +

Description

+ +

Interceptions

+ +

Cette trappe permet d'intercepter les opérations suivantes :

+ + + +

Invariants

+ +

Si les invariants suivant ne sont pas respectés, le proxy renverra une exception {{jsxref("TypeError")}} :

+ + + +

Exemples

+ +

Utilisation simple

+ +
var obj = {};
+var proto = {};
+var gestionnaire = {
+    getPrototypeOf(cible) {
+        console.log(cible === obj);   // true
+        console.log(this === gestionnaire); // true
+        return proto;
+    }
+};
+
+var p = new Proxy(obj, gestionnaire);
+console.log(Object.getPrototypeOf(p) === proto);    // true
+
+ +

Cinq façons de déclencher la trappe getPrototypeOf

+ +
var obj = {};
+var p = new Proxy(obj, {
+    getPrototypeOf(cible) {
+        return Array.prototype;
+    }
+});
+console.log(
+    Object.getPrototypeOf(p) === Array.prototype,  // true
+    Reflect.getPrototypeOf(p) === Array.prototype, // true
+    p.__proto__ === Array.prototype,               // true
+    Array.prototype.isPrototypeOf(p),              // true
+    p instanceof Array                             // true
+);
+
+ +

Deux types d'exceptions

+ +
var obj = {};
+var p = new Proxy(obj, {
+    getPrototypeOf(cible) {
+        return "toto";
+    }
+});
+Object.getPrototypeOf(p); // TypeError : "toto" n'est pas un objet ou null
+
+var obj = Object.preventExtensions({});
+var p = new Proxy(obj, {
+    getPrototypeOf(cible) {
+        return {};
+    }
+});
+Object.getPrototypeOf(p); // TypeError : on attend la même valeur pour le prototype
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-proxy-object-internal-methods-and-internal-slots-getprototypeof', '[[GetPrototypeOf]]')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-proxy-object-internal-methods-and-internal-slots-getprototypeof', '[[GetPrototypeOf]]')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Proxy.handler.getPrototypeOf")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/proxy/proxy/has/index.html b/files/fr/web/javascript/reference/global_objects/proxy/proxy/has/index.html deleted file mode 100644 index 89861b997d..0000000000 --- a/files/fr/web/javascript/reference/global_objects/proxy/proxy/has/index.html +++ /dev/null @@ -1,127 +0,0 @@ ---- -title: handler.has() -slug: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/has -tags: - - ECMAScript 2015 - - JavaScript - - Méthode - - Proxy - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/has -original_slug: Web/JavaScript/Reference/Objets_globaux/Proxy/handler/has ---- -
{{JSRef}}
- -

La méthode handler.has() est une trappe pour l'opérateur {{jsxref("Opérateurs/L_opérateur_in", "in")}}.

- -
{{EmbedInteractiveExample("pages/js/proxyhandler-has.html", "taller")}}
- -

Syntaxe

- -
var p = new Proxy(cible, {
-  has: function(cible, prop) {
-  }
-});
-
- -

Paramètres

- -

Les paramètres suivants sont passés à la méthode has. this est lié au gestionnaire.

- -
-
cible
-
L'objet cible.
-
prop
-
Le nom ou le symbole ({{jsxref("Symbol")}}) de la propriété dont on veut connaître l'existence.
-
- -

Valeur de retour

- -

La méthode has doit renvoyer une valeur booléenne.

- -

Description

- -

La méthode handler.has est une trappe pour l'opérateur {{jsxref("Opérateurs/L_opérateur_in", "in")}}.

- -

Interceptions

- -

Cette trappe permet d'intercepter les opérations suivantes :

- - - -

Invariants

- -

Si les invariants suivants ne sont pas respectés, le proxy lèvera une exception {{jsxref("TypeError")}} :

- - - -

Exemples

- -

Dans l'exemple qui suit, on intercepte l'opérateur {{jsxref("Opérateurs/L_opérateur_in", "in")}} :

- -
var p = new Proxy({}, {
-  has: function(cible, prop) {
-    console.log("appelée : " + prop);
-    return true;
-  }
-});
-
-console.log("a" in p); // "appelée : a"
-                       // true
-
- -

L'exemple suivant ne respecte pas un invariant :

- -
var obj = { a: 10 };
-Object.preventExtensions(obj);
-var p = new Proxy(obj, {
-  has: function(cible, prop) {
-    return false;
-  }
-});
-
-"a" in p; // TypeError levée
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-proxy-object-internal-methods-and-internal-slots-hasproperty-p', '[[HasProperty]]')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-proxy-object-internal-methods-and-internal-slots-hasproperty-p', '[[HasProperty]]')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Proxy.handler.has")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/proxy/proxy/has/index.md b/files/fr/web/javascript/reference/global_objects/proxy/proxy/has/index.md new file mode 100644 index 0000000000..89861b997d --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/proxy/proxy/has/index.md @@ -0,0 +1,127 @@ +--- +title: handler.has() +slug: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/has +tags: + - ECMAScript 2015 + - JavaScript + - Méthode + - Proxy + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/has +original_slug: Web/JavaScript/Reference/Objets_globaux/Proxy/handler/has +--- +
{{JSRef}}
+ +

La méthode handler.has() est une trappe pour l'opérateur {{jsxref("Opérateurs/L_opérateur_in", "in")}}.

+ +
{{EmbedInteractiveExample("pages/js/proxyhandler-has.html", "taller")}}
+ +

Syntaxe

+ +
var p = new Proxy(cible, {
+  has: function(cible, prop) {
+  }
+});
+
+ +

Paramètres

+ +

Les paramètres suivants sont passés à la méthode has. this est lié au gestionnaire.

+ +
+
cible
+
L'objet cible.
+
prop
+
Le nom ou le symbole ({{jsxref("Symbol")}}) de la propriété dont on veut connaître l'existence.
+
+ +

Valeur de retour

+ +

La méthode has doit renvoyer une valeur booléenne.

+ +

Description

+ +

La méthode handler.has est une trappe pour l'opérateur {{jsxref("Opérateurs/L_opérateur_in", "in")}}.

+ +

Interceptions

+ +

Cette trappe permet d'intercepter les opérations suivantes :

+ + + +

Invariants

+ +

Si les invariants suivants ne sont pas respectés, le proxy lèvera une exception {{jsxref("TypeError")}} :

+ + + +

Exemples

+ +

Dans l'exemple qui suit, on intercepte l'opérateur {{jsxref("Opérateurs/L_opérateur_in", "in")}} :

+ +
var p = new Proxy({}, {
+  has: function(cible, prop) {
+    console.log("appelée : " + prop);
+    return true;
+  }
+});
+
+console.log("a" in p); // "appelée : a"
+                       // true
+
+ +

L'exemple suivant ne respecte pas un invariant :

+ +
var obj = { a: 10 };
+Object.preventExtensions(obj);
+var p = new Proxy(obj, {
+  has: function(cible, prop) {
+    return false;
+  }
+});
+
+"a" in p; // TypeError levée
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-proxy-object-internal-methods-and-internal-slots-hasproperty-p', '[[HasProperty]]')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-proxy-object-internal-methods-and-internal-slots-hasproperty-p', '[[HasProperty]]')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Proxy.handler.has")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/proxy/proxy/index.html b/files/fr/web/javascript/reference/global_objects/proxy/proxy/index.html deleted file mode 100644 index fb508680e1..0000000000 --- a/files/fr/web/javascript/reference/global_objects/proxy/proxy/index.html +++ /dev/null @@ -1,82 +0,0 @@ ---- -title: Gestionnaire de Proxy (handler) -slug: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy -tags: - - ECMAScript 2015 - - JavaScript - - Proxy - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy -translation_of_original: Web/JavaScript/Reference/Global_Objects/Proxy/handler -original_slug: Web/JavaScript/Reference/Objets_globaux/Proxy/handler ---- -
{{JSRef}}
- -

L'objet gestionnaire d'un proxy est un objet qui contient les trappes de captures (traps) pour le  {{jsxref("Proxy", "proxy", "", 1)}}.

- -

Méthodes

- -

Toutes ces trappes sont optionnelles. Si une trappe n'a pas été définie, le comportement par défaut sera de transmettre l'opération à la cible.

- -
-
{{jsxref("Objets_globaux/Proxy/handler/getPrototypeOf", "handler.getPrototypeOf()")}}
-
Une trappe pour {{jsxref("Object.getPrototypeOf")}}.
-
{{jsxref("Objets_globaux/Proxy/handler/setPrototypeOf", "handler.setPrototypeOf()")}}
-
Une trappe pour {{jsxref("Object.setPrototypeOf")}}.
-
{{jsxref("Objets_globaux/Proxy/handler/isExtensible", "handler.isExtensible()")}}
-
Une trappe pour {{jsxref("Object.isExtensible")}}.
-
{{jsxref("Objets_globaux/Proxy/handler/preventExtensions", "handler.preventExtensions()")}}
-
Une trappe pour {{jsxref("Object.preventExtensions")}}.
-
{{jsxref("Objets_globaux/Proxy/handler/getOwnPropertyDescriptor", "handler.getOwnPropertyDescriptor()")}}
-
Une trappe pour {{jsxref("Object.getOwnPropertyDescriptor")}}.
-
{{jsxref("Objets_globaux/Proxy/handler/defineProperty", "handler.defineProperty()")}}
-
Une trappe pour {{jsxref("Object.defineProperty")}}.
-
{{jsxref("Objets_globaux/Proxy/handler/has", "handler.has()")}}
-
Une trappe pour l'opérateur {{jsxref("Opérateurs/L_opérateur_in", "in")}}.
-
{{jsxref("Objets_globaux/Proxy/handler/get", "handler.get()")}}
-
Une trappe pour l'accès aux valeurs des propriétés.
-
{{jsxref("Objets_globaux/Proxy/handler/set", "handler.set()")}}
-
Une trappe pour la définition des valeurs des propriétés.
-
{{jsxref("Objets_globaux/Proxy/handler/deleteProperty", "handler.deleteProperty()")}}
-
Une trappe pour l'opérateur {{jsxref("Opérateurs/L_opérateur_delete", "delete")}}.
-
{{jsxref("Objets_globaux/Proxy/handler/ownKeys", "handler.ownKeys()")}}
-
Une trappe pour {{jsxref("Object.getOwnPropertyNames")}} et {{jsxref("Object.getOwnPropertySymbols")}}.
-
{{jsxref("Objets_globaux/Proxy/handler/apply", "handler.apply()")}}
-
Une trappe pour l'appel d'une fonction.
-
{{jsxref("Objets_globaux/Proxy/handler/construct", "handler.construct()")}}
-
Une trappe pour l'opérateur {{jsxref("Opérateurs/L_opérateur_new", "new")}}.
-
- -

Certaines trappes non standards sont désormais obsolètes et ont été supprimées.

- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-proxy-object-internal-methods-and-internal-slots', 'Proxy Object Internal Methods and Internal Slots')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-proxy-object-internal-methods-and-internal-slots', 'Proxy Object Internal Methods and Internal Slots')}}{{Spec2('ESDraft')}}La trappe pour enumerate a été retirée.
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Proxy.handler")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/proxy/proxy/index.md b/files/fr/web/javascript/reference/global_objects/proxy/proxy/index.md new file mode 100644 index 0000000000..fb508680e1 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/proxy/proxy/index.md @@ -0,0 +1,82 @@ +--- +title: Gestionnaire de Proxy (handler) +slug: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy +tags: + - ECMAScript 2015 + - JavaScript + - Proxy + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy +translation_of_original: Web/JavaScript/Reference/Global_Objects/Proxy/handler +original_slug: Web/JavaScript/Reference/Objets_globaux/Proxy/handler +--- +
{{JSRef}}
+ +

L'objet gestionnaire d'un proxy est un objet qui contient les trappes de captures (traps) pour le  {{jsxref("Proxy", "proxy", "", 1)}}.

+ +

Méthodes

+ +

Toutes ces trappes sont optionnelles. Si une trappe n'a pas été définie, le comportement par défaut sera de transmettre l'opération à la cible.

+ +
+
{{jsxref("Objets_globaux/Proxy/handler/getPrototypeOf", "handler.getPrototypeOf()")}}
+
Une trappe pour {{jsxref("Object.getPrototypeOf")}}.
+
{{jsxref("Objets_globaux/Proxy/handler/setPrototypeOf", "handler.setPrototypeOf()")}}
+
Une trappe pour {{jsxref("Object.setPrototypeOf")}}.
+
{{jsxref("Objets_globaux/Proxy/handler/isExtensible", "handler.isExtensible()")}}
+
Une trappe pour {{jsxref("Object.isExtensible")}}.
+
{{jsxref("Objets_globaux/Proxy/handler/preventExtensions", "handler.preventExtensions()")}}
+
Une trappe pour {{jsxref("Object.preventExtensions")}}.
+
{{jsxref("Objets_globaux/Proxy/handler/getOwnPropertyDescriptor", "handler.getOwnPropertyDescriptor()")}}
+
Une trappe pour {{jsxref("Object.getOwnPropertyDescriptor")}}.
+
{{jsxref("Objets_globaux/Proxy/handler/defineProperty", "handler.defineProperty()")}}
+
Une trappe pour {{jsxref("Object.defineProperty")}}.
+
{{jsxref("Objets_globaux/Proxy/handler/has", "handler.has()")}}
+
Une trappe pour l'opérateur {{jsxref("Opérateurs/L_opérateur_in", "in")}}.
+
{{jsxref("Objets_globaux/Proxy/handler/get", "handler.get()")}}
+
Une trappe pour l'accès aux valeurs des propriétés.
+
{{jsxref("Objets_globaux/Proxy/handler/set", "handler.set()")}}
+
Une trappe pour la définition des valeurs des propriétés.
+
{{jsxref("Objets_globaux/Proxy/handler/deleteProperty", "handler.deleteProperty()")}}
+
Une trappe pour l'opérateur {{jsxref("Opérateurs/L_opérateur_delete", "delete")}}.
+
{{jsxref("Objets_globaux/Proxy/handler/ownKeys", "handler.ownKeys()")}}
+
Une trappe pour {{jsxref("Object.getOwnPropertyNames")}} et {{jsxref("Object.getOwnPropertySymbols")}}.
+
{{jsxref("Objets_globaux/Proxy/handler/apply", "handler.apply()")}}
+
Une trappe pour l'appel d'une fonction.
+
{{jsxref("Objets_globaux/Proxy/handler/construct", "handler.construct()")}}
+
Une trappe pour l'opérateur {{jsxref("Opérateurs/L_opérateur_new", "new")}}.
+
+ +

Certaines trappes non standards sont désormais obsolètes et ont été supprimées.

+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-proxy-object-internal-methods-and-internal-slots', 'Proxy Object Internal Methods and Internal Slots')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-proxy-object-internal-methods-and-internal-slots', 'Proxy Object Internal Methods and Internal Slots')}}{{Spec2('ESDraft')}}La trappe pour enumerate a été retirée.
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Proxy.handler")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/proxy/proxy/isextensible/index.html b/files/fr/web/javascript/reference/global_objects/proxy/proxy/isextensible/index.html deleted file mode 100644 index c7fd6613ec..0000000000 --- a/files/fr/web/javascript/reference/global_objects/proxy/proxy/isextensible/index.html +++ /dev/null @@ -1,120 +0,0 @@ ---- -title: handler.isExtensible() -slug: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/isExtensible -tags: - - ECMAScript 2015 - - JavaScript - - Méthode - - Proxy - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/isExtensible -original_slug: Web/JavaScript/Reference/Objets_globaux/Proxy/handler/isExtensible ---- -
{{JSRef}}
- -

La méthode handler.isExtensible() est une trappe pour intercepter les opérations de {{jsxref("Object.isExtensible()")}}.

- -
{{EmbedInteractiveExample("pages/js/proxyhandler-isextensible.html", "taller")}}
- -

Syntaxe

- -
var p = new Proxy(cible, {
-  isExtensible: function(cible) {
-  }
-});
-
- -

Paramètres

- -

Les paramètres suivants sont passés à la méthode isExtensible. this est ici lié au gestionnaire (handler).

- -
-
cible
-
L'objet cible.
-
- -

Valeur de retour

- -

La méthode isExtensible doit renvoyer une valeur booléenne.

- -

Description

- -

La méthode handler.isExtensible() est une trappe pour intercepter {{jsxref("Object.isExtensible()")}}.

- -

Interceptions

- -

Cette trappe intercepte les opérations suivantes :

- - - -

Invariants

- -

Si les invariants suivants ne sont pas respectés, le proxy renverra une exception  {{jsxref("TypeError")}} :

- - - -

Exemples

- -

Dans l'exemple qui suit, on intercepte {{jsxref("Object.isExtensible()")}}.

- -
var p = new Proxy({}, {
-  isExtensible: function(cible) {
-    console.log("appelée");
-    return true;
-  }
-});
-
-console.log(Object.isExtensible(p)); // "appelée"
-                                     // true
-
- -

Le code suivante ne respecte pas l'invariant et entraîne donc une exception.

- -
var p = new Proxy({}, {
-  isExtensible: function(cible) {
-    return false;
-  }
-});
-
-Object.isExtensible(p); // TypeError est levée
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-proxy-object-internal-methods-and-internal-slots-isextensible', '[[IsExtensible]]')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-proxy-object-internal-methods-and-internal-slots-isextensible', '[[IsExtensible]]')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Proxy.handler.isExtensible")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/proxy/proxy/isextensible/index.md b/files/fr/web/javascript/reference/global_objects/proxy/proxy/isextensible/index.md new file mode 100644 index 0000000000..c7fd6613ec --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/proxy/proxy/isextensible/index.md @@ -0,0 +1,120 @@ +--- +title: handler.isExtensible() +slug: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/isExtensible +tags: + - ECMAScript 2015 + - JavaScript + - Méthode + - Proxy + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/isExtensible +original_slug: Web/JavaScript/Reference/Objets_globaux/Proxy/handler/isExtensible +--- +
{{JSRef}}
+ +

La méthode handler.isExtensible() est une trappe pour intercepter les opérations de {{jsxref("Object.isExtensible()")}}.

+ +
{{EmbedInteractiveExample("pages/js/proxyhandler-isextensible.html", "taller")}}
+ +

Syntaxe

+ +
var p = new Proxy(cible, {
+  isExtensible: function(cible) {
+  }
+});
+
+ +

Paramètres

+ +

Les paramètres suivants sont passés à la méthode isExtensible. this est ici lié au gestionnaire (handler).

+ +
+
cible
+
L'objet cible.
+
+ +

Valeur de retour

+ +

La méthode isExtensible doit renvoyer une valeur booléenne.

+ +

Description

+ +

La méthode handler.isExtensible() est une trappe pour intercepter {{jsxref("Object.isExtensible()")}}.

+ +

Interceptions

+ +

Cette trappe intercepte les opérations suivantes :

+ + + +

Invariants

+ +

Si les invariants suivants ne sont pas respectés, le proxy renverra une exception  {{jsxref("TypeError")}} :

+ + + +

Exemples

+ +

Dans l'exemple qui suit, on intercepte {{jsxref("Object.isExtensible()")}}.

+ +
var p = new Proxy({}, {
+  isExtensible: function(cible) {
+    console.log("appelée");
+    return true;
+  }
+});
+
+console.log(Object.isExtensible(p)); // "appelée"
+                                     // true
+
+ +

Le code suivante ne respecte pas l'invariant et entraîne donc une exception.

+ +
var p = new Proxy({}, {
+  isExtensible: function(cible) {
+    return false;
+  }
+});
+
+Object.isExtensible(p); // TypeError est levée
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-proxy-object-internal-methods-and-internal-slots-isextensible', '[[IsExtensible]]')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-proxy-object-internal-methods-and-internal-slots-isextensible', '[[IsExtensible]]')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Proxy.handler.isExtensible")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/proxy/proxy/ownkeys/index.html b/files/fr/web/javascript/reference/global_objects/proxy/proxy/ownkeys/index.html deleted file mode 100644 index 45365d9401..0000000000 --- a/files/fr/web/javascript/reference/global_objects/proxy/proxy/ownkeys/index.html +++ /dev/null @@ -1,133 +0,0 @@ ---- -title: handler.ownKeys() -slug: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/ownKeys -tags: - - ECMAScript 2015 - - JavaScript - - Méthode - - Proxy - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/ownKeys -original_slug: Web/JavaScript/Reference/Objets_globaux/Proxy/handler/ownKeys ---- -
{{JSRef}}
- -

La méthode handler.ownKeys() est une trappe pour {{jsxref("Object.getOwnPropertyNames()")}}.

- -
{{EmbedInteractiveExample("pages/js/proxyhandler-ownkeys.html", "taller")}}
- -

Syntaxe

- -
var p = new Proxy(cible, {
-  ownKeys: function(cible) {
-  }
-});
-
- -

Paramètres

- -

Le paramètre suivant est passé à la méthode ownKeys. this est lié au gestionnaire.

- -
-
cible
-
L'objet cible.
-
- -

Valeur de retour

- -

La méthode ownKeys doit renvoyer un objet énumérable.

- -

Description

- -

La méthode handler.ownKeys() est une trappe pour intercepter les opérations de {{jsxref("Object.getOwnPropertyNames()")}}.

- -

Interceptions

- -

Cette trappe permet d'intercepter les opérations suivantes :

- - - -

Invariants

- -

Si les invariants suivants ne sont pas respectés, le proxy renverra une exception {{jsxref("TypeError")}} :

- - - -

Exemples

- -

Dans l'exemple suivant, on intercepte l'action de {{jsxref("Object.getOwnPropertyNames()")}}.

- -
var p = new Proxy({}, {
-  ownKeys: function(target) {
-    console.log("appelée");
-    return ["a", "b", "c"];
-  }
-});
-
-console.log(Object.getOwnPropertyNames(p)); // "appelée"
-                                            // [ "a", "b", "c"]
-
- -

L'exemple suivant ne respecte pas l'ensemble des invariants :

- -
var obj = {};
-Object.defineProperty(obj, "a", {
-  configurable: false,
-  enumerable: true,
-  value: 10 }
-);
-
-var p = new Proxy(obj, {
-  ownKeys: function(cible) {
-    return [123, 12.5, true, false, undefined, null, {}, []];
-  }
-});
-
-console.log(Object.getOwnPropertyNames(p));
-// TypeError est levée
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-proxy-object-internal-methods-and-internal-slots-ownpropertykeys', '[[OwnPropertyKeys]]')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-proxy-object-internal-methods-and-internal-slots-ownpropertykeys', '[[OwnPropertyKeys]]')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Proxy.handler.ownKeys")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/proxy/proxy/ownkeys/index.md b/files/fr/web/javascript/reference/global_objects/proxy/proxy/ownkeys/index.md new file mode 100644 index 0000000000..45365d9401 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/proxy/proxy/ownkeys/index.md @@ -0,0 +1,133 @@ +--- +title: handler.ownKeys() +slug: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/ownKeys +tags: + - ECMAScript 2015 + - JavaScript + - Méthode + - Proxy + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/ownKeys +original_slug: Web/JavaScript/Reference/Objets_globaux/Proxy/handler/ownKeys +--- +
{{JSRef}}
+ +

La méthode handler.ownKeys() est une trappe pour {{jsxref("Object.getOwnPropertyNames()")}}.

+ +
{{EmbedInteractiveExample("pages/js/proxyhandler-ownkeys.html", "taller")}}
+ +

Syntaxe

+ +
var p = new Proxy(cible, {
+  ownKeys: function(cible) {
+  }
+});
+
+ +

Paramètres

+ +

Le paramètre suivant est passé à la méthode ownKeys. this est lié au gestionnaire.

+ +
+
cible
+
L'objet cible.
+
+ +

Valeur de retour

+ +

La méthode ownKeys doit renvoyer un objet énumérable.

+ +

Description

+ +

La méthode handler.ownKeys() est une trappe pour intercepter les opérations de {{jsxref("Object.getOwnPropertyNames()")}}.

+ +

Interceptions

+ +

Cette trappe permet d'intercepter les opérations suivantes :

+ + + +

Invariants

+ +

Si les invariants suivants ne sont pas respectés, le proxy renverra une exception {{jsxref("TypeError")}} :

+ + + +

Exemples

+ +

Dans l'exemple suivant, on intercepte l'action de {{jsxref("Object.getOwnPropertyNames()")}}.

+ +
var p = new Proxy({}, {
+  ownKeys: function(target) {
+    console.log("appelée");
+    return ["a", "b", "c"];
+  }
+});
+
+console.log(Object.getOwnPropertyNames(p)); // "appelée"
+                                            // [ "a", "b", "c"]
+
+ +

L'exemple suivant ne respecte pas l'ensemble des invariants :

+ +
var obj = {};
+Object.defineProperty(obj, "a", {
+  configurable: false,
+  enumerable: true,
+  value: 10 }
+);
+
+var p = new Proxy(obj, {
+  ownKeys: function(cible) {
+    return [123, 12.5, true, false, undefined, null, {}, []];
+  }
+});
+
+console.log(Object.getOwnPropertyNames(p));
+// TypeError est levée
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-proxy-object-internal-methods-and-internal-slots-ownpropertykeys', '[[OwnPropertyKeys]]')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-proxy-object-internal-methods-and-internal-slots-ownpropertykeys', '[[OwnPropertyKeys]]')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Proxy.handler.ownKeys")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/proxy/proxy/preventextensions/index.html b/files/fr/web/javascript/reference/global_objects/proxy/proxy/preventextensions/index.html deleted file mode 100644 index 0add4d9608..0000000000 --- a/files/fr/web/javascript/reference/global_objects/proxy/proxy/preventextensions/index.html +++ /dev/null @@ -1,121 +0,0 @@ ---- -title: handler.preventExtensions() -slug: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/preventExtensions -tags: - - ECMAScript 2015 - - JavaScript - - Méthode - - Proxy - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/preventExtensions -original_slug: Web/JavaScript/Reference/Objets_globaux/Proxy/handler/preventExtensions ---- -
{{JSRef}}
- -

La méthode handler.preventExtensions() est une trappe pour {{jsxref("Object.preventExtensions()")}}.

- -
{{EmbedInteractiveExample("pages/js/proxyhandler-preventextensions.html", "taller")}}
- -

Syntaxe

- -
var p = new Proxy(cible, {
-  preventExtensions: function(cible) {
-  }
-});
-
- -

Paramètres

- -

Le paramètre suivant est passé à la méthode preventExtensions. this est lié au gestionnaire (handler).

- -
-
cible
-
L'objet cible.
-
- -

Valeur de retour

- -

La méthode preventExtensions doit renvoyer une valeur booléenne.

- -

Description

- -

La méthode handler.preventExtensions() est une trappe pour intercepter {{jsxref("Object.preventExtensions()")}}.

- -

Interceptions

- -

Cette trappe peut intercepter les opérations de :

- - - -

Invariants

- -

Si les invariants suivants ne sont pas respectés, le proxy renverra une execption {{jsxref("TypeError")}} :

- - - -

Exemples

- -

On intercepte l'appel à {{jsxref("Object.preventExtensions()")}} dans l'exemple suivant :

- -
var p = new Proxy({}, {
-  preventExtensions: function(cible) {
-    console.log("appelé");
-    Object.preventExtensions(cible);
-    return true;
-  }
-});
-
-console.log(Object.preventExtensions(p)); // "appelé"
-                                          // true
-
- -

Le code suivant ne respecte pas l'invariant :

- -
var p = new Proxy({}, {
-  preventExtensions: function(cible) {
-    return true;
-  }
-});
-
-Object.preventExtensions(p); // TypeError est levée
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-proxy-object-internal-methods-and-internal-slots-preventextensions', '[[PreventExtensions]]')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-proxy-object-internal-methods-and-internal-slots-preventextensions', '[[PreventExtensions]]')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Proxy.handler.preventExtensions")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/proxy/proxy/preventextensions/index.md b/files/fr/web/javascript/reference/global_objects/proxy/proxy/preventextensions/index.md new file mode 100644 index 0000000000..0add4d9608 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/proxy/proxy/preventextensions/index.md @@ -0,0 +1,121 @@ +--- +title: handler.preventExtensions() +slug: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/preventExtensions +tags: + - ECMAScript 2015 + - JavaScript + - Méthode + - Proxy + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/preventExtensions +original_slug: Web/JavaScript/Reference/Objets_globaux/Proxy/handler/preventExtensions +--- +
{{JSRef}}
+ +

La méthode handler.preventExtensions() est une trappe pour {{jsxref("Object.preventExtensions()")}}.

+ +
{{EmbedInteractiveExample("pages/js/proxyhandler-preventextensions.html", "taller")}}
+ +

Syntaxe

+ +
var p = new Proxy(cible, {
+  preventExtensions: function(cible) {
+  }
+});
+
+ +

Paramètres

+ +

Le paramètre suivant est passé à la méthode preventExtensions. this est lié au gestionnaire (handler).

+ +
+
cible
+
L'objet cible.
+
+ +

Valeur de retour

+ +

La méthode preventExtensions doit renvoyer une valeur booléenne.

+ +

Description

+ +

La méthode handler.preventExtensions() est une trappe pour intercepter {{jsxref("Object.preventExtensions()")}}.

+ +

Interceptions

+ +

Cette trappe peut intercepter les opérations de :

+ + + +

Invariants

+ +

Si les invariants suivants ne sont pas respectés, le proxy renverra une execption {{jsxref("TypeError")}} :

+ + + +

Exemples

+ +

On intercepte l'appel à {{jsxref("Object.preventExtensions()")}} dans l'exemple suivant :

+ +
var p = new Proxy({}, {
+  preventExtensions: function(cible) {
+    console.log("appelé");
+    Object.preventExtensions(cible);
+    return true;
+  }
+});
+
+console.log(Object.preventExtensions(p)); // "appelé"
+                                          // true
+
+ +

Le code suivant ne respecte pas l'invariant :

+ +
var p = new Proxy({}, {
+  preventExtensions: function(cible) {
+    return true;
+  }
+});
+
+Object.preventExtensions(p); // TypeError est levée
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-proxy-object-internal-methods-and-internal-slots-preventextensions', '[[PreventExtensions]]')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-proxy-object-internal-methods-and-internal-slots-preventextensions', '[[PreventExtensions]]')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Proxy.handler.preventExtensions")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/proxy/proxy/set/index.html b/files/fr/web/javascript/reference/global_objects/proxy/proxy/set/index.html deleted file mode 100644 index 543e1b4640..0000000000 --- a/files/fr/web/javascript/reference/global_objects/proxy/proxy/set/index.html +++ /dev/null @@ -1,121 +0,0 @@ ---- -title: handler.set() -slug: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/set -tags: - - ECMAScript 2015 - - JavaScript - - Méthode - - Proxy - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/set -original_slug: Web/JavaScript/Reference/Objets_globaux/Proxy/handler/set ---- -
{{JSRef}}
- -

La méthode handler.set() est une trappe permettant d'intercepter les opérations visant à définir ou modifier la valeur d'une propriété.

- -
{{EmbedInteractiveExample("pages/js/proxyhandler-set.html", "taller")}}
- -

Syntaxe

- -
var p = new Proxy(cible, {
-  set: function(cible, propriété, valeur, récepteur) {
-  }
-});
-
- -

Paramètres

- -

Les paramètres suivants sont passés à la méthode set. this est lié au gestionnaire.

- -
-
cible
-
L'objet cible.
-
propriété
-
Le nom ou le symbole ({{jsxref("Symbol")}}) de la propriété à définir.
-
valeur
-
La nouvelle valeur à définir pour la propriété.
-
récepteur
-
L'objet intialement visé par l'affectation. Généralement ce sera le proxy lui-même. Le gestionnaire set peut également être appelé indirectement, via la chaîne de prototypes ou d'autres façons. Par exemple, si on exécute l'instruction obj.nom = "Jean", et qu'obj n'est pas un proxy ni ne possède de propriété nom mais s'il possède un proxy dans sa chaîne de prototypes, le gestionnaire set sera appelé et obj sera passé en tant que récepteur.
-
- -

Valeur de retour

- -

La méthode set doit renvoyer une valeur booléenne. Elle renvoie true pour indiquer que l'affectation a réussi. Si la méthode set renvoie false et que l'affectation était exécutée dans du code en mode strict, une exception {{jsxref("TypeError")}} sera levée.

- -

Description

- -

La méthode handler.set est une trappe qui permet d'intercepter les opérations qui sont utilisées pour définir ou modifier la valeur d'une propriété.

- -

Interceptions

- -

Cette trappe permet d'intercepter les opérations suivantes :

- - - -

Invariants

- -

Si les invariants suivants ne sont pas respectés, le proxy renverra une exception {{jsxref("TypeError")}} :

- - - -

Exemples

- -

Dans l'exemple qui suit, on intercepte la définition d'une nouvelle propriété.

- -
var p = new Proxy({}, {
-  set: function(target, prop, value, receiver) {
-    target[prop] = value;
-    console.log('property set: ' + prop + ' = ' + value);
-    return true;
-  }
-});
-
-console.log('a' in p);  // false
-
-p.a = 10;               // "property set: a = 10"
-console.log('a' in p);  // true
-console.log(p.a);       // 10
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-proxy-object-internal-methods-and-internal-slots-set-p-v-receiver', '[[Set]]')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-proxy-object-internal-methods-and-internal-slots-set-p-v-receiver', '[[Set]]')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Proxy.handler.set")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/proxy/proxy/set/index.md b/files/fr/web/javascript/reference/global_objects/proxy/proxy/set/index.md new file mode 100644 index 0000000000..543e1b4640 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/proxy/proxy/set/index.md @@ -0,0 +1,121 @@ +--- +title: handler.set() +slug: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/set +tags: + - ECMAScript 2015 + - JavaScript + - Méthode + - Proxy + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/set +original_slug: Web/JavaScript/Reference/Objets_globaux/Proxy/handler/set +--- +
{{JSRef}}
+ +

La méthode handler.set() est une trappe permettant d'intercepter les opérations visant à définir ou modifier la valeur d'une propriété.

+ +
{{EmbedInteractiveExample("pages/js/proxyhandler-set.html", "taller")}}
+ +

Syntaxe

+ +
var p = new Proxy(cible, {
+  set: function(cible, propriété, valeur, récepteur) {
+  }
+});
+
+ +

Paramètres

+ +

Les paramètres suivants sont passés à la méthode set. this est lié au gestionnaire.

+ +
+
cible
+
L'objet cible.
+
propriété
+
Le nom ou le symbole ({{jsxref("Symbol")}}) de la propriété à définir.
+
valeur
+
La nouvelle valeur à définir pour la propriété.
+
récepteur
+
L'objet intialement visé par l'affectation. Généralement ce sera le proxy lui-même. Le gestionnaire set peut également être appelé indirectement, via la chaîne de prototypes ou d'autres façons. Par exemple, si on exécute l'instruction obj.nom = "Jean", et qu'obj n'est pas un proxy ni ne possède de propriété nom mais s'il possède un proxy dans sa chaîne de prototypes, le gestionnaire set sera appelé et obj sera passé en tant que récepteur.
+
+ +

Valeur de retour

+ +

La méthode set doit renvoyer une valeur booléenne. Elle renvoie true pour indiquer que l'affectation a réussi. Si la méthode set renvoie false et que l'affectation était exécutée dans du code en mode strict, une exception {{jsxref("TypeError")}} sera levée.

+ +

Description

+ +

La méthode handler.set est une trappe qui permet d'intercepter les opérations qui sont utilisées pour définir ou modifier la valeur d'une propriété.

+ +

Interceptions

+ +

Cette trappe permet d'intercepter les opérations suivantes :

+ + + +

Invariants

+ +

Si les invariants suivants ne sont pas respectés, le proxy renverra une exception {{jsxref("TypeError")}} :

+ + + +

Exemples

+ +

Dans l'exemple qui suit, on intercepte la définition d'une nouvelle propriété.

+ +
var p = new Proxy({}, {
+  set: function(target, prop, value, receiver) {
+    target[prop] = value;
+    console.log('property set: ' + prop + ' = ' + value);
+    return true;
+  }
+});
+
+console.log('a' in p);  // false
+
+p.a = 10;               // "property set: a = 10"
+console.log('a' in p);  // true
+console.log(p.a);       // 10
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-proxy-object-internal-methods-and-internal-slots-set-p-v-receiver', '[[Set]]')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-proxy-object-internal-methods-and-internal-slots-set-p-v-receiver', '[[Set]]')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Proxy.handler.set")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/proxy/proxy/setprototypeof/index.html b/files/fr/web/javascript/reference/global_objects/proxy/proxy/setprototypeof/index.html deleted file mode 100644 index e12a4e6f90..0000000000 --- a/files/fr/web/javascript/reference/global_objects/proxy/proxy/setprototypeof/index.html +++ /dev/null @@ -1,133 +0,0 @@ ---- -title: handler.setPrototypeOf() -slug: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/setPrototypeOf -tags: - - ECMAScript 2015 - - JavaScript - - Méthode - - Proxy - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/setPrototypeOf -original_slug: Web/JavaScript/Reference/Objets_globaux/Proxy/handler/setPrototypeOf ---- -
{{JSRef}}
- -

La méthode handler.setPrototypeOf() est une trappe pour intercepter {{jsxref("Object.setPrototypeOf()")}}.

- -
{{EmbedInteractiveExample("pages/js/proxyhandler-setprototypeof.html", "taller", "taller")}}
- -

Syntaxe

- -
var p = new Proxy(cible, {
-  setPrototypeOf: function(cible, prototype) {
-  }
-});
-
- -

Paramètres

- -

Les paramètres suivants sont passés à la méthode setPrototypeOf. this est lié au gestionnaire.

- -
-
cible
-
L'objet cible.
-
prototype
-
Le nouveau prototype de l'objet ou null.
-
- -

Valeur de retour

- -

La méthode setPrototypeOf renvoie true si la propriété interne [[Prototype]] a bien été modifiée et false sinon.

- -

Description

- -

La méthode handler.setPrototypeOf est une trappe utilisée pour intercepter les opérations de {{jsxref("Object.setPrototypeOf()")}}.

- -

Interceptions

- -

Cette trappe permet d'intercepter :

- - - -

Invariants

- -

Si les invariants suivants ne sont pas respectés, le proxy renverra une exception {{jsxref("TypeError")}} :

- - - -

Exemples

- -

Si on souhaite interdire la définition d'un nouveau prototype pour un objet, on peut utiliser une méthode setPrototypeOf qui renvoie false ou qui génère une exception.

- -

Avec cette première approche, toute opération qui voudra modifier le prototype génèrera une exception. On aura par exemple {{jsxref("Object.setPrototypeOf()")}} qui créera et lèvera l'exception TypeError. Si la modification est effectuée par une opération qui ne génère pas d'exception en cas d'échec (comme  {{jsxref("Reflect.setPrototypeOf()")}}), aucune exception ne sera générée.

- -
var handlerReturnsFalse = {
-    setPrototypeOf(target, newProto) {
-        return false;
-    }
-};
-
-var newProto = {}, target = {};
-
-var p1 = new Proxy(target, handlerReturnsFalse);
-Object.setPrototypeOf(p1, newProto);
-// lève une TypeError
-Reflect.setPrototypeOf(p1, newProto);
-// renvoie false
-
- -

Avec cette seconde approche, toute tentative de modification génèrera une exception. On utilisera celle-ci lorsqu'on souhaite qu'une erreur se produisent, y compris pour les opérations qui ne génèrent habituellement pas d'exception ou si on souhaite générer une exception sur mesure.

- -
var handlerThrows = {
-    setPrototypeOf(target, newProto) {
-        throw new Error("erreur custom");
-    }
-};
-
-var newProto = {}, target = {};
-
-var p2 = new Proxy(target, handlerThrows);
-Object.setPrototypeOf(p2, newProto);
-// lève une exception new Error("erreur custom")
-Reflect.setPrototypeOf(p2, newProto);
-// lève une exception new Error("erreur custom")
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-proxy-object-internal-methods-and-internal-slots-setprototypeof-v', '[[SetPrototypeOf]]')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-proxy-object-internal-methods-and-internal-slots-setprototypeof-v', '[[SetPrototypeOf]]')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Proxy.handler.setPrototypeOf")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/proxy/proxy/setprototypeof/index.md b/files/fr/web/javascript/reference/global_objects/proxy/proxy/setprototypeof/index.md new file mode 100644 index 0000000000..e12a4e6f90 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/proxy/proxy/setprototypeof/index.md @@ -0,0 +1,133 @@ +--- +title: handler.setPrototypeOf() +slug: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/setPrototypeOf +tags: + - ECMAScript 2015 + - JavaScript + - Méthode + - Proxy + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/setPrototypeOf +original_slug: Web/JavaScript/Reference/Objets_globaux/Proxy/handler/setPrototypeOf +--- +
{{JSRef}}
+ +

La méthode handler.setPrototypeOf() est une trappe pour intercepter {{jsxref("Object.setPrototypeOf()")}}.

+ +
{{EmbedInteractiveExample("pages/js/proxyhandler-setprototypeof.html", "taller", "taller")}}
+ +

Syntaxe

+ +
var p = new Proxy(cible, {
+  setPrototypeOf: function(cible, prototype) {
+  }
+});
+
+ +

Paramètres

+ +

Les paramètres suivants sont passés à la méthode setPrototypeOf. this est lié au gestionnaire.

+ +
+
cible
+
L'objet cible.
+
prototype
+
Le nouveau prototype de l'objet ou null.
+
+ +

Valeur de retour

+ +

La méthode setPrototypeOf renvoie true si la propriété interne [[Prototype]] a bien été modifiée et false sinon.

+ +

Description

+ +

La méthode handler.setPrototypeOf est une trappe utilisée pour intercepter les opérations de {{jsxref("Object.setPrototypeOf()")}}.

+ +

Interceptions

+ +

Cette trappe permet d'intercepter :

+ + + +

Invariants

+ +

Si les invariants suivants ne sont pas respectés, le proxy renverra une exception {{jsxref("TypeError")}} :

+ + + +

Exemples

+ +

Si on souhaite interdire la définition d'un nouveau prototype pour un objet, on peut utiliser une méthode setPrototypeOf qui renvoie false ou qui génère une exception.

+ +

Avec cette première approche, toute opération qui voudra modifier le prototype génèrera une exception. On aura par exemple {{jsxref("Object.setPrototypeOf()")}} qui créera et lèvera l'exception TypeError. Si la modification est effectuée par une opération qui ne génère pas d'exception en cas d'échec (comme  {{jsxref("Reflect.setPrototypeOf()")}}), aucune exception ne sera générée.

+ +
var handlerReturnsFalse = {
+    setPrototypeOf(target, newProto) {
+        return false;
+    }
+};
+
+var newProto = {}, target = {};
+
+var p1 = new Proxy(target, handlerReturnsFalse);
+Object.setPrototypeOf(p1, newProto);
+// lève une TypeError
+Reflect.setPrototypeOf(p1, newProto);
+// renvoie false
+
+ +

Avec cette seconde approche, toute tentative de modification génèrera une exception. On utilisera celle-ci lorsqu'on souhaite qu'une erreur se produisent, y compris pour les opérations qui ne génèrent habituellement pas d'exception ou si on souhaite générer une exception sur mesure.

+ +
var handlerThrows = {
+    setPrototypeOf(target, newProto) {
+        throw new Error("erreur custom");
+    }
+};
+
+var newProto = {}, target = {};
+
+var p2 = new Proxy(target, handlerThrows);
+Object.setPrototypeOf(p2, newProto);
+// lève une exception new Error("erreur custom")
+Reflect.setPrototypeOf(p2, newProto);
+// lève une exception new Error("erreur custom")
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-proxy-object-internal-methods-and-internal-slots-setprototypeof-v', '[[SetPrototypeOf]]')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-proxy-object-internal-methods-and-internal-slots-setprototypeof-v', '[[SetPrototypeOf]]')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Proxy.handler.setPrototypeOf")}}

+ +

Voir aussi

+ + diff --git a/files/fr/web/javascript/reference/global_objects/proxy/revocable/index.html b/files/fr/web/javascript/reference/global_objects/proxy/revocable/index.html deleted file mode 100644 index de489f2172..0000000000 --- a/files/fr/web/javascript/reference/global_objects/proxy/revocable/index.html +++ /dev/null @@ -1,91 +0,0 @@ ---- -title: Proxy.revocable() -slug: Web/JavaScript/Reference/Global_Objects/Proxy/revocable -tags: - - ECMAScript 2015 - - JavaScript - - Méthode - - Proxy - - Reference -translation_of: Web/JavaScript/Reference/Global_Objects/Proxy/revocable -original_slug: Web/JavaScript/Reference/Objets_globaux/Proxy/revocable ---- -
{{JSRef}}
- -

La méthode Proxy.revocable() est utilisée afin de créer un objet {{jsxref("Proxy")}} révocable.

- -

Syntaxe

- -
Proxy.revocable(cible, gestionnaire);
-
- -

Paramètres

- -
{{Page("/fr/docs/Web/JavaScript/Reference/Objets_globaux/Proxy", "Paramètres")}}
- -

Valeur de retour

- -

Un nouvel objet Proxy révocable est renvoyé par la méthode.

- -

Description

- -

Un Proxy révocable est un objet qui possède les propriétés suivantes : {proxy: proxy, revoke: revoke}.

- -
-
proxy
-
Un proxy crée avec un appel à new Proxy(cible, gestionnaire).
-
revoke
-
Une fonction sans argument qui permet de désactiver le proxy.
-
- -

Si la fonction revoke() est appelée, le proxy devient inutilisable et toutes les trappes définies via un gestionnaire lèveront une exception {{jsxref("TypeError")}}. Une fois que le proxy est révoqué, il conserve cet état et peut être traité par le ramasse-miettes. D'éventuels appels suivants à revoke() n'auront aucun effet.

- -

Exemples

- -
var révocable = Proxy.revocable({}, {
-  get: function(cible, nom) {
-    return "[[" + nom + "]]";
-  }
-});
-var proxy = révocable.proxy;
-console.log(proxy.toto); // "[[toto]]"
-
-révocable.revoke();
-
-console.log(proxy.toto); // TypeError est levée
-proxy.toto = 1           // TypeError à nouveau
-delete proxy.toto        // TypeError toujours
-typeof proxy             // "object", typeof ne déclenche aucune trappe
-
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-proxy.revocable', 'Proxy Revocation Functions')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-proxy.revocable', 'Proxy Revocation Functions')}}{{Spec2('ESDraft')}} 
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Proxy.revocable")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/proxy/revocable/index.md b/files/fr/web/javascript/reference/global_objects/proxy/revocable/index.md new file mode 100644 index 0000000000..de489f2172 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/proxy/revocable/index.md @@ -0,0 +1,91 @@ +--- +title: Proxy.revocable() +slug: Web/JavaScript/Reference/Global_Objects/Proxy/revocable +tags: + - ECMAScript 2015 + - JavaScript + - Méthode + - Proxy + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Proxy/revocable +original_slug: Web/JavaScript/Reference/Objets_globaux/Proxy/revocable +--- +
{{JSRef}}
+ +

La méthode Proxy.revocable() est utilisée afin de créer un objet {{jsxref("Proxy")}} révocable.

+ +

Syntaxe

+ +
Proxy.revocable(cible, gestionnaire);
+
+ +

Paramètres

+ +
{{Page("/fr/docs/Web/JavaScript/Reference/Objets_globaux/Proxy", "Paramètres")}}
+ +

Valeur de retour

+ +

Un nouvel objet Proxy révocable est renvoyé par la méthode.

+ +

Description

+ +

Un Proxy révocable est un objet qui possède les propriétés suivantes : {proxy: proxy, revoke: revoke}.

+ +
+
proxy
+
Un proxy crée avec un appel à new Proxy(cible, gestionnaire).
+
revoke
+
Une fonction sans argument qui permet de désactiver le proxy.
+
+ +

Si la fonction revoke() est appelée, le proxy devient inutilisable et toutes les trappes définies via un gestionnaire lèveront une exception {{jsxref("TypeError")}}. Une fois que le proxy est révoqué, il conserve cet état et peut être traité par le ramasse-miettes. D'éventuels appels suivants à revoke() n'auront aucun effet.

+ +

Exemples

+ +
var révocable = Proxy.revocable({}, {
+  get: function(cible, nom) {
+    return "[[" + nom + "]]";
+  }
+});
+var proxy = révocable.proxy;
+console.log(proxy.toto); // "[[toto]]"
+
+révocable.revoke();
+
+console.log(proxy.toto); // TypeError est levée
+proxy.toto = 1           // TypeError à nouveau
+delete proxy.toto        // TypeError toujours
+typeof proxy             // "object", typeof ne déclenche aucune trappe
+
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-proxy.revocable', 'Proxy Revocation Functions')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-proxy.revocable', 'Proxy Revocation Functions')}}{{Spec2('ESDraft')}} 
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Proxy.revocable")}}

+ +

Voir aussi

+ + -- cgit v1.2.3-54-g00ecf