簡體   English   中英

修改數組時的Javascript通知

[英]Javascript notification when modifying array

我為我們中間的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調用(或類似的操作,重要的是在數組內容已更改時接收通知。

有人對此嗎? 如何做到這一點?

眾所周知, alert(a.array[0]); 只會觸發a.array的getter / setter,而a.array[0]等於var p = a.array; p[0] 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設置為該值。

代碼是: Jsfiddle

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM