There are several possibilities to achieve what you want. But remember, none of them should be used in production environment.
The first option detects if setItem
method was called by sessionStorage
or localStorage
object. You could write it this way:
var _setItem = Storage.prototype.setItem;
Storage.prototype.setItem = function(key, value) {
if (this === window.localStorage) {
// do what you want if setItem is called on localStorage
} else {
// fallback to default action
_setItem.apply(this, arguments);
}
}
The second one, replaces prototype of sessionStorage
or localStorage
object. It may look like this:
localStorage.__proto__ = Object.create(Storage.prototype);
localStorage.__proto__.setItem = function() {
// your logic here
}
Notice, that I used __proto__
pseudo property which is non-standard, but exposed in Chrome and Firefox. (Don't know about Opera, Safari and others). However, as you can see it might be helpful during development.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…