区分javascript构造函数的实例

时间:2014-09-26 20:56:08

标签: javascript oop local-storage

我正在尝试为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?)中的错误。我不关心尝试解决这个问题,尽管使用原型感觉更好。

1 个答案:

答案 0 :(得分:0)

直接检查this值:

var _setItem = Storage.prototype.setItem;

Storage.prototype.setItem = function(key) {
    if (this === localStorage) {
        localStorageObservable.notifySubscribers(key);
    }
    _setItem.apply(this, arguments);
};

Live demo