我正在尝试为localStorage.setItem()
创建一个包装器,以便我可以在整个应用程序中监听更改。这就是我现在所处的位置,它按预期工作:
var _setItem = Storage.prototype.setItem;
Storage.prototype.setItem = function(key) {
localStorage.______tmp = true;
if( this.______tmp ) {
delete this.______tmp;
localStorageObservable.notifySubscribers(key);
}
_setItem.apply(this, arguments);
};
正如你可能猜到的那样,我想摆脱整个_____tmp的事情,但我需要知道什么时候在localStorage上调用setItem而不是sessionStorage。有更优雅的方式来做我需要的吗?我最初的尝试是通过执行以下操作来创建实例方法:
var _setItem = localStorage.setItem;
localStorage.setItem = function(key) {
_setItem.apply(this, arguments);
}
但这会导致Firefox typeof localStorage.setItem === "string"
(I know, wierd right?)中的错误。我不关心尝试解决这个问题,尽管使用原型感觉更好。
答案 0 :(得分:0)
直接检查this
值:
var _setItem = Storage.prototype.setItem;
Storage.prototype.setItem = function(key) {
if (this === localStorage) {
localStorageObservable.notifySubscribers(key);
}
_setItem.apply(this, arguments);
};