我写了一个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