Tenga en cuenta que Object.Watch
y Object.Observe
son a la vez obsoleta ahora (como el junio del 2018).
Estaba buscando una manera fácil de monitorear cambios en un objeto o variable, y encontré Object.watch()
que es compatible con los navegadores Mozilla, pero no con IE. Así que comencé a buscar para ver si alguien había escrito algún tipo de equivalente.
Casi lo único que he encontrado ha sido un complemento de jQuery , pero no estoy seguro de si esa es la mejor manera de hacerlo. Ciertamente uso jQuery en la mayoría de mis proyectos, así que no me preocupa el aspecto de jQuery ...
De todos modos, la pregunta: ¿Puede alguien mostrarme un ejemplo funcional de ese complemento de jQuery? Tengo problemas para que funcione ...
O, ¿alguien conoce alguna alternativa mejor que funcione en varios navegadores?
Actualización después de las respuestas :
¡Gracias a todos por las respuestas! Probé el código publicado aquí: http://webreflection.blogspot.com/2009/01/internet-explorer-object-watch.html
Pero parece que no pude hacerlo funcionar con IE. El siguiente código funciona bien en Firefox, pero no hace nada en IE. En Firefox, cada vez que watcher.status
se cambia, se llama a document.write()
in watcher.watch()
y puedes ver el resultado en la página. En IE, eso no sucede, pero puedo ver que watcher.status
está actualizando el valor, porque el últimodocument.write()
llamada muestra el valor correcto (tanto en IE como en FF). Pero, si no se llama a la función de devolución de llamada, entonces no tiene sentido ... :)
¿Me estoy perdiendo de algo?
var options = {'status': 'no status'},
watcher = createWatcher(options);
watcher.watch("status", function(prop, oldValue, newValue) {
document.write("old: " + oldValue + ", new: " + newValue + "<br>");
return newValue;
});
watcher.status = 'asdf';
watcher.status = '1234';
document.write(watcher.status + "<br>");
fuente
Respuestas:
(Lo siento por la publicación cruzada, pero esta respuesta que di a una pregunta similar funciona bien aquí)
He creado un objeto pequeño. Mire la calza para esto hace un tiempo. Funciona en IE8, Safari, Chrome, Firefox, Opera, etc.
fuente
Object.defineProperty()
existía. Terminé mirando la referencia de MDN para ver cómo funcionaba.Ese complemento simplemente usa un temporizador / intervalo para verificar repetidamente los cambios en un objeto. Quizás lo suficientemente bueno, pero personalmente me gustaría tener más inmediatez como observador.
Aquí hay un intento de llevar
watch
/unwatch
a IE: http://webreflection.blogspot.com/2009/01/internet-explorer-object-watch.html .Cambia la sintaxis de la forma en que Firefox agrega observadores. En vez de :
Tú lo haces:
No tan dulce, pero como observador, se le notifica de inmediato.
fuente
Las respuestas a esta pregunta están un poco desactualizadas. Object.watch y Object.observe están en desuso y no deben usarse.
Hoy en día, ahora puede usar el objeto Proxy para monitorear (e interceptar) los cambios realizados en un objeto. Aquí tienes un ejemplo básico:
Si necesita observar los cambios realizados en un objeto anidado, debe utilizar una biblioteca especializada. Publiqué observable delgado y funciona de esta manera:
fuente
Respuesta actual
Utilice el nuevo objeto Proxy , que puede observar los cambios en su objetivo.
Respuesta anterior de 2015
Podría haber usado Object.observe () de ES7 . Aquí hay un polyfill. Pero Object.observe () ahora está cancelado . ¡Lo siento gente!
fuente
Tenga en cuenta que en Chrome 36 y superior también puede usar
Object.observe
. En realidad, esto es parte de un futuro estándar ECMAScript, y no una característica específica del navegador como la de MozillaObject.watch
.Object.observe
solo funciona en las propiedades del objeto, pero es mucho más eficiente queObject.watch
(lo que está destinado a fines de depuración, no para uso de producción).fuente
puede utilizar Object.defineProperty .
ver la propiedad
bar
enfoo
fuente
He usado Watch.js en uno de mis proyectos. Y está funcionando bien Una de las principales ventajas de usar esta biblioteca es:
El ejemplo se da a continuación
¡Esto es tan simple como esto!
fuente
También creo que en este momento la mejor solución es usar Watch.JS, encuentre un buen tutorial aquí: Escuche / Observe cambios de objetos o matrices en Javascript (evento de cambio de propiedad en objetos de Javascript)
fuente