我寫了一個answer,我不得不寫一些裝飾器,這樣我就可以掛鉤一些函數調用。但是,我也想要掛鉤屬性setter調用,但我不知道如何做到這一點。如何爲動態屬性編寫裝飾器?
在答案中,我想鉤入localStorage
,以便我可以聽取任何更改。我通過裝飾setItem()
和removeItem()
函數來完成此操作。
我知道我可以通過創建新的,在某些時候調用原件來裝飾功能。
var _setItem = localStorage.setItem;
localStorage.setItem = function() {
_setItem.apply(this, arguments);
localStorageObserver.notifySubscribers(arguments[0]);
};
這工作的很好,但還有其他用途,我希望掛鉤,財產訪問。以下是所有等價物的存儲對象:
localStorage.setItem('someProperty', 'value');
localStorage.someProperty = 'value';
localStorage['someProperty'] = 'value';
所以我需要掛接到最後兩種情況,但我不知道如何可以完成。
如何爲動態屬性編寫裝飾器?這是否可能?
我想我可以手動創建屬性,因爲它們被設置爲隱藏存儲對象完成的工作,但這看起來不是很有伸縮性。如果有一個簡單的setProperty(name, value)
函數可以插入,我可以修飾它。但據我所知,這並不存在。
'localStorage.key'說這是一個函數 – loveNoHate 2014-10-04 09:10:48
對不起,不好的例子。 – 2014-10-04 09:12:29
;)............. – loveNoHate 2014-10-04 09:14:58