Pourquoi y a-Objet.observer() obsolete
Est-il une autre approche?
Est-il une autre façon de faire de la détection de changement dans l'objet?
Il y a la méthode de remplacement, mais quelqu'un peut me dire comment puis-je le faire en utilisant un Proxy:
var obj = {
foo: 0,
bar: 1
};
Object.observe(obj, function(changes) {
console.log(changes);
});
obj.baz = 2;
//[{name: 'baz', object: <obj>, type: 'add'}]
obj.foo = 'hello';
//[{name: 'foo', object: <obj>, type: 'update', oldValue: 0}]
Proxy()
est là maintenant!- Proxy
- Ou utiliser les getter ou setter
- J'ai vu la méthode de remplacement, mais il a obtenu confondre pourriez-vous veuillez donner des exemple simple.
- Proxy et des getters/setters sont très limitées par rapport à
Object.observe
. Je souhaite qu'il n'était pas abandonné. - Objet.observer n'a pas rupture d'égalité stricte.
- Proxy de l'objet n'est plus utile lorsque vous souhaitez déboguer quelque chose d'original et de code n'utilise pas de proxy ffs
Vous devez vous connecter pour publier un commentaire.
Vous pouvez réaliser cela avec des getters et les setters.
Sinon, dans un navigateur avec le support de Proxy, vous pouvez écrire un solution générique.
target[prop] = value
- quel milieu êtes-vous en cours d'exécution dans? Aussi ne pas le proxy de remplacer la variable d'origine, afin "d'observer" un autreobj.bar = x
ne pas faire ce qui est suggéré ici.Object.observe
n'aurait pas eu ce problème si c'est accepté dans la langue. Proxy aussi ont des limitationsObject.observe
n'a pas, dans le sens que vous devez pré-méditer faire de vos objets observables, alors queObject.observe
travaux sur l'arbitraire de la 3e partie des références.Disclaimer: je suis l'auteur de la objet-observateur bibliothèque est proposée ci-dessous.
Je n'avais pas aller avec des getters/setters solution - c'est compliqué, peu évolutif et pas facile à gérer. Épine dorsale ont fait de leur liaison bidirectionnelle de cette façon et le passe-partout pour qu'il fonctionne correctement est tout à fait un morceau de code.
Procurations est la meilleure façon d'obtenir ce dont vous avez besoin, il suffit d'ajouter les exemples ci-dessus quelques rappels de l'enregistrement et de la gestion et de les exécuter sur un des changements.
En ce qui concerne le polyfill bibliothèques: certains de/la plupart de ces mises en œuvre en utilisant "sale cochez la case' ou l'interrogation, la technique pas efficace, pas performant. Parfois, c'est le cas de le polyfill souligné par Nirus ci-dessus.
Je le recommande pour ramasser une bibliothèque qui ne l'observation par Procurations. Il ya un peu là-bas, objet-observateur être l'un d'entre eux: l'une écrite, pour ce cas d'utilisation exactement, utilise natif de Procurations, profondeur de l'arbre-observation etc.
@Dan Prince solution devrait être le premier choix toujours.
Juste au cas où, pour quelque raison que si vous voulez prendre en charge les navigateurs qui sont assez âgés, je vous suggère d'aller pour les polyfill de bibliothèques disponibles sur Github ou de l'utilisation Objet.defineProperties API qui est pris en charge dans IE 9 pour reproduire le même.