留意在JavaScript对象属性的变化[复制](Watch for object properti

2019-06-18 10:49发布

可能重复:
JavaScript的Object.Watch对于所有浏览器?

我刚才读Mozilla的文档的手表()方法 。 它看起来非常有用。

但是,我找不到Safari浏览器类似的东西。 无论是IE浏览器。

你如何管理跨浏览器的便携性?

Answer 1:

我创建了一个小object.watch垫片这个前一阵子。 它工作在IE8,Safari浏览器,Chrome浏览器,火狐,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;
    };


Answer 2:

不幸的是,这不是一个便携式解决方案。 IE浏览器有这样的事,据我所知,虽然这将是真棒,如果有



Answer 3:

你也许可以实现自己的notifcation的系统,通过重写方法和变量。 我不把它看作是这个关键,虽然,但我不知道你在这样一个系统做规划是什么。



文章来源: Watch for object properties changes in JavaScript [duplicate]