我正在尝试为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而不是sessionStorage上调用setItem。有没有更优雅的方式来做我需要的事情?我最初的尝试是通过执行以下操作来创建实例方法:
var _setItem = localStorage.setItem;
localStorage.setItem = function(key) {
_setItem.apply(this, arguments);
}
但这会导致Firefox中
typeof localStorage.setItem === "string"
(I know, wierd right?)的错误。我不关心尝试解决这个问题,因为无论如何使用原型都会感觉更好。 最佳答案
直接检查this
值:
var _setItem = Storage.prototype.setItem;
Storage.prototype.setItem = function(key) {
if (this === localStorage) {
localStorageObservable.notifySubscribers(key);
}
_setItem.apply(this, arguments);
};
Live demo