検知 JavaScriptのオブジェクトプロパティの変更を監視する




jquery 変数 の 値 が 変わっ たら (3)

私は小さなオブジェクトを作成しました。これまでしばらくシムを見てください。 IE8、Safari、Chrome、Firefox、Operaなどで動作します。

/*
* 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;
    };

可能な重複:
Javascript Object.Whatすべてのブラウザを監視しますか?

watch()メソッドの Mozillaのドキュメントを読んだだけです。 非常に便利です。

しかし、私はSafariに似た何かを見つけることができません。 どちらもInternet Explorerではありません。

ブラウザ間で移植性をどのように管理していますか?


メソッドや変数を上書きすることで、独自の通知システムを実装できます。 私はそれが批判的であるとは思わないが、私はあなたがそのようなシステムを使って何を計画しているのか分からない。


残念ながら、これはポータブルな解決策ではありません。 私の知る限り、IEにはこのようなものはありませんが、もしあれば素晴らしいでしょう





watch