2010-08-16 54 views
4

存儲(localStorage,sessionStorage)允許使用任意屬性。例如。你可以做的Javascript中的動態屬性getters/setters?

localStorage.foo = 'bar'; 

代替

localStorage.setItem('foo', 'bar'); 

我自己的JavaScript對象可以有相同的行爲?當試圖設置屬性時,我想執行一些代碼。

注意:我明顯知道我可以創建setters,但是這對名字我不知道的屬性是無效的。

注意2:一個位spec的檢查後,我發現它並沒有真正保證,這將工作,除非該鍵已經被設定setItem():

存儲對象上支持的命名屬性的名稱是當前存在於與對象關聯的列表中的每個鍵/值對的鍵名稱

我也可以自己實現這種行爲,只要第一組通過一個方法,通過動態確定獲得者/設定者。

回答

2

您可以使用__defineGetter__()__defineSetter__(),但不幸的是它們是Mozilla對Javascript 1.5的擴展,所以它們僅在某些瀏覽器(Firefox,Opera和Safari的最新版本)中可用。

More information and some examples here

除此之外,無法將自定義行爲添加到設置/獲取對象的屬性。

+0

還有新的ECMAScript 5 getters和setters,目前正在進入新的瀏覽器。 – 2010-08-16 11:08:07