herencia - Esté atento a los cambios en las propiedades del objeto en JavaScript
prototype javascript ejemplos (3)
Posible duplicado:
JavaScript Object.Watch para todos los navegadores?
Acabo de leer la documentación de Mozilla para el método watch () . Se ve muy útil.
Sin embargo, no puedo encontrar algo similar para Safari. Ni Internet Explorer.
¿Cómo gestionas la portabilidad en todos los navegadores?
He creado un pequeño objeto. Revisar esto hace un tiempo. Funciona en IE8, Safari, Chrome, Firefox, Opera, etc.
/*
* object.watch v0.0.1: Cross-browser object.watch
*
* By Elijah Grey, http://eligrey.com
*
* A shim that partially implements object.watch and object.unwatch
* in browsers that have accessor support.
*
* Public Domain.
* NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.
*/
// object.watch
if (!Object.prototype.watch)
Object.prototype.watch = function (prop, handler) {
var oldval = this[prop], newval = oldval,
getter = function () {
return newval;
},
setter = function (val) {
oldval = newval;
return newval = handler.call(this, prop, oldval, val);
};
if (delete this[prop]) { // can''t watch constants
if (Object.defineProperty) // ECMAScript 5
Object.defineProperty(this, prop, {
get: getter,
set: setter
});
else if (Object.prototype.__defineGetter__ && Object.prototype.__defineSetter__) { // legacy
Object.prototype.__defineGetter__.call(this, prop, getter);
Object.prototype.__defineSetter__.call(this, prop, setter);
}
}
};
// object.unwatch
if (!Object.prototype.unwatch)
Object.prototype.unwatch = function (prop) {
var val = this[prop];
delete this[prop]; // remove accessors
this[prop] = val;
};
Lamentablemente, esta no es una solución portátil. IE no tiene nada como esto que yo sepa, aunque sería increíble si hubiera
Probablemente podría implementar su propio sistema de notificación, sobrescribiendo métodos y variables. No creo que sea tan crítico, pero no sé qué piensas hacer con un sistema así.