J'ai une fonction qui définit un getter et un setter sur un objet ou un tableau. Mon problème est que si la valeur définie est un objet, je ne peux pas détecter ses changements internes, mais seulement quand on y accède en supposant que l'on y accède via le getter. Au moment où le getter retourne l'objet mais je veux effectuer une action après avoir renvoyé le getter s'il a été changé ou non.Effectuer une action après le retour d'un getter
Mon code au moment:
set = function(obj, i, val) {
Object.defineProperty(obj, i, {
set(newVal) {
val = newVal
// react to changes
insert(val, i)
},
get() {
return val
//I want this to run after the object was accessed and possibly changed
if (typeof val == "object") {
insert(val, i)
}
},
configurable: true,
enumerable: true
})
}
J'ai pensé à une solution qui est setTimeout si le poseur et getter sont supprimés le setTimeout peut provoquer un comportement indésirable et je préférerais le code resté synchrone.
L'autre idée que j'ai considérée est la définition de setters et getters sur toutes les propriétés des objets, mais cela serait coûteux.
Comment puis-je résoudre ce problème?
* "Toutefois, si setter et getter sont supprimés, setTimeout peut provoquer un comportement indésirable" * Huh? –
Vous pouvez geler l'objet ou utiliser une bibliothèque comme Immutablejs, de sorte que la seule façon de mettre à jour l'objet est de le repositionner. –
Cela ressemble à un problème X/Y. Quel est le problème sous-jacent que vous essayez de résoudre? –