【问题标题】:Javascript notification when modifying array修改数组时的Javascript通知
【发布时间】:2011-04-08 08:51:43
【问题描述】:

我为我们中间的 javascript 开发人员准备了一些东西。

我有以下课程:

function MyClass(){
    this.__defineSetter__("array", function(val){
        alert("setter called");
        this._array = val;
    });
    this.__defineGetter__("array", function(){
        alert("getter called");
        return this._array;
    });
    this._array = new Array();
};

现在,当我执行时会发生什么

var a = new MyClass();
a.array[0] = "MyString";
alert(a.array[0]);

getter 被调用了两次(这很好),但是 setter 永远不会被执行,因为实际的数组引用没有改变,只有内容(我猜是预期的行为)。 但是,当修改数组内容时,我还需要“通知”。因此,调用

a.array[0] = "MyString";

还应该引起 setter-call(或类似的东西,重要的是在数组内容发生更改时收到通知。

有人喜欢这个吗?如何实现?

【问题讨论】:

    标签: javascript arrays setter getter


    【解决方案1】:

    我们知道,alert(a.array[0]); 只会触发 a.array 的 getter/setter,而a.array[0] 等于 var p = a.array; p[0] 这意味着你想要的是触发 p[0] 的 getter/setter,而不仅仅是 p 的 getter/二传手。 所以,我们可以换个思路:

    为 p 的所有项目添加 getter/setter

    所以,我们可以这样做:

    • 如果使用p[6] = 0之类的,会触发p的getter/setter,判断p的所有item是否都有getter/setter,如果不加。
    • 如果像 p = [2,3,4] 这样使用,只需先将 getter/setter 设置为该值。

    代码是:Jsfiddle

    【讨论】:

      猜你喜欢
      • 2021-07-13
      • 2019-08-18
      • 2020-01-12
      • 1970-01-01
      • 2021-09-05
      • 1970-01-01
      • 1970-01-01
      • 2021-11-07
      • 2019-04-12
      相关资源
      最近更新 更多