handler.defineProperty()
La méthode handler.defineProperty()
est une trappe pour Object.defineProperty()
.
The source for this interactive example is stored in a GitHub repository. If you'd like to contribute to the interactive examples project, please clone https://github.com/mdn/interactive-examples and send us a pull request.
Le code source de cet exemple interactif est disponible dans un dépôt GitHub. Si vous souhaitez contribuez à ces exemples, n'hésitez pas à cloner https://github.com/mdn/interactive-examples et à envoyer une pull request !
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 (
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 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 TypeError
:
- Une propriété ne peut pas être ajoutée si l'objet cible n'est pas extensible.
- Une propriété ne peut pas être ajoutée ou modifiée pour être rendue non-configurable si elle n'existe pas comme une propriété propre non-configurable de l'objet cible.
- Une propriété ne peut pas être non-configurable s'il existe une propriété correspondante de l'objet cible qui est configurable.
- Si une propriété correspondante existe pour l'objet cible
Object.defineProperty(cible, propriété, descripteur)
ne lèvera pas d'exception. - En mode stricte, si le gestionnaire defineProperty renvoie une valeur fausse (dans un contexte booléen), cela entraînera une exception
TypeError
.
Exemples
Dans le code suivant, on piège l'appel à 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 Object.defineProperty()
ou 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 :
enumerable
configurable
writable
value
get
set
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 | État | Commentaires |
---|---|---|
ECMAScript 2015 (6th Edition, ECMA-262) La définition de '[[DefineOwnProperty]]' dans cette spécification. |
Standard | Définition initiale. |
ECMAScript (ECMA-262) La définition de '[[DefineOwnProperty]]' dans cette spécification. |
Standard évolutif |
Compatibilité des navigateurs
BCD tables only load in the browser