2011-04-08 49 views
1

我爲我們中的JavaScript開發者找到了一些東西。修改陣列時的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]); 

,吸氣叫兩次(這是好的),但從來沒有執行二傳手,因爲實際的數組引用不會改變,只有內容(我猜想是預期的行爲)。 但是,當數組內容被修改時,我還需要「通知」。因此,呼叫

a.array[0] = "MyString"; 

也應引起setter方法的調用(或類似的東西,重要的是當數組內容已更改,收到通知。

任何人進入這個?如何才能實現這一目標?

回答

0

正如我們所知,alert(a.array[0]);只會觸發a.array的getter/setter方法,並a.array[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