Frage

  

Mögliche Duplizieren:
   Javascript Object.Watch für alle Browser?

Ich habe gerade gelesen Mozilla-Dokumentation für die watch () Methode . Es sieht sehr nützlich.

Allerdings kann ich nicht etwas ähnliches für Safari finden. Weder Internet Explorer.

Wie schaffen Sie Portabilität in allen Browsern?

War es hilfreich?

Lösung

Ich habe ein kleines erstellt object.watch Shim für diese eine Weile her. Es funktioniert in 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;
    };

Andere Tipps

Leider ist dies nicht eine tragbare Lösung. IE hat nichts, wie dies mein Wissen, obwohl es wäre genial, wenn es

Sie könnten wahrscheinlich Ihr eigenes System von notifcation implementieren, durch Methoden und Variablen zu überschreiben. Ich sehe es nicht als ob das kritisch zu sein, aber ich weiß nicht, was du tust, mit einem solchen System zu planen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top