【发布时间】:2014-10-04 09:05:47
【问题描述】:
我写了一个answer,我必须在其中写一些装饰器,这样我才能挂钩一些函数调用。但是,我也想挂接到属性设置器调用中,但我不确定如何做到这一点。
在答案中,我想联系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说是函数 -
@JeffMercado 抱歉,我似乎不知道装饰器是做什么的。
标签: javascript properties decorator