当前位置: 首页 > 面试题库 >

观察JavaScript中对象属性的更改

伍溪叠
2023-03-14
问题内容

我只是阅读了watch()方法的Mozilla文档。它看起来非常有用。

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

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


问题答案:

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


 类似资料:
  • 我正在努力处理一个简单的RxJs查询,但我似乎无法理解。如果观察对象被包装在一个对象中,我似乎不知道如何合并它们。如果我直接从flatMap返回Observable,那么这个示例可以正常工作,但我还需要在输出中输入名称。我怎样才能做到这一点? 我正在使用RxJS 5.0.0-beta.2 基本数据结构: RxJs函数: 预期结果: 实际结果:

  • 我有 Vue 组件,带有名为 的 prop,它是一个具有一堆属性的对象。而且它经常变化。 仅当<code>产品和<code>p2属性更改时,组件应加载新数据。一种方法是监视整个产品,并在更改时加载数据。但它会产生不必要的请求,因为<code>p1可能没有更改。 另一个思路是观察< code>product.p1和< code>product.p2,调用同一个函数在每个观察器中加载数据。但是,在产品

  • Observables 是多个值的惰性推送集合。它填补了下面表格中的空白: 单个值 多个值 拉取 Function Iterator 推送 Promise Observable 示例 - 当订阅下面代码中的 Observable 的时候会立即(同步地)推送值1、2、3,然后1秒后会推送值4,再然后是完成流: var observable = Rx.Observable.create(functio

  • 问题内容: angular js如何监视自定义指令上的属性以接受要绑定的角度值 这是我到目前为止的内容: 但观察到的值返回为未定义 问题答案: 来自http://docs.angularjs.org/api/ng.$compile.directive.Attributes: 所有这些在Angular中均视为等效: 所以属性归一化为 因此,这就是您想要的:

  • 英文原文:http://emberjs.com/guides/object-model/observers/ Ember 为包括计算后属性在内的任意一种属性提供了观察器。可以通过使用 addObserver 方法来为一个对象设置一个观察器: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 Person = Ember.Obj

  • 英文原文:http://emberjs.com/guides/object-model/what-do-i-use-when/ 如何选择? 刚刚接触Ember.js的用户常常为什么时候使用计算属性、绑定和观察器感到困惑。下面给出几条建议: 计算属性通常通过整合其他属性来构建新的属性。计算属性不应该包含任何应用行为,而且不应该在调用的时候产生任何副作用。除了在极少数的情况下,重复调用计算属性应该返回