修改数组时的Javascript通知

修改数组时的Javascript通知,javascript,arrays,setter,getter,Javascript,Arrays,Setter,Getter,我为我们当中的javascript开发人员准备了一些东西 我上了以下课程: function MyClass(){ this.__defineSetter__("array", function(val){ alert("setter called"); this._array = val; }); this.__defineGetter__("array", function(){ alert("getter called

我为我们当中的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调用(或类似的调用),重要的是在数组内容发生更改时接收通知

有人会这样做吗?这是怎么实现的?

正如我们所知,
警报(a.array[0]);
只会触发a.array的getter/setter,而
a.array[0]
equal
var p=a.array;p[0]
这意味着你想要的是触发p[0]的getter/setter,而不仅仅是p的getter/setter。 因此,我们可以改变我们的想法:

将getter/setter添加到p的所有项

因此,我们可以这样做:

  • 如果使用了
    p[6]=0
    ,将触发p的getter/setter,则判断p的所有项是否都有getter/setter,如果没有,则添加它
  • 如果使用像
    p=[2,3,4]
    这样的函数,只需首先将getter/setter设置为该值
代码是: