监视 JavaScript 中的对象属性更改 [重复]

Posted

技术标签:

【中文标题】监视 JavaScript 中的对象属性更改 [重复]【英文标题】:Watch for object properties changes in JavaScript [duplicate] 【发布时间】:2010-11-19 04:05:36 【问题描述】:

可能重复:javascript Object.Watch for all browsers?

我刚刚阅读了 Mozilla 的 watch() method 文档。看起来很有用。

但是,我无法为 Safari 找到类似的东西。既不是 Internet Explorer。

您如何管理跨浏览器的可移植性?

【问题讨论】:

复制:***.com/questions/1029241/… 这里有一个相关的讨论:http://***.com/questions/1029241/javascript-object-watch-for-all-browsers 【参考方案1】:

不久前我为此创建了一个小object.watch shim。它适用于 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;
    ;

【讨论】:

有什么理由将它从 Github 中删除?更好的解决方案?没有工作? IE7 怎么样? 它仍在 Github 上,我只是将其移至 gist (gist.github.com/384583),因为它对于 repo imo 来说并不够重要。 我们如何使用它来监控 DOM 对象上的 innerhtml 它真的适用于非 DOM 对象上的 IE8 吗? 这在 Safari 中不适用于某些 DOM 属性,例如 el.style.width【参考方案2】:

很遗憾,这不是一个可移植的解决方案。据我所知,IE 没有这样的东西,但如果有的话那就太棒了

【讨论】:

【参考方案3】:

您可以通过覆盖方法和变量来实现自己的通知系统。虽然我不认为它有那么重要,但我不知道你打算用这样的系统做什么。

【讨论】:

以上是关于监视 JavaScript 中的对象属性更改 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

控制 DOM 中的每个“src”属性更改

如何查看javascript object对象的所拥有的属性值

如何查看javascript object对象的所拥有的属性值

如何在 Mac OS X 上监视目录中的更改?

如何监视 ObservableList JavaFX 中包含的对象的更改

监视属性中的Vuejs未定义对象[重复]