有几种可能性可以实现您想要的。但请记住,它们都不应该在生产环境中使用。
第一个选项检测setItem
方法是否由sessionStorage
或localStorage
对象调用。你可以这样写:
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);
}
}
第二个,替换原型sessionStorage
或localStorage
对象。它可能看起来像这样:
localStorage.__proto__ = Object.create(Storage.prototype);
localStorage.__proto__.setItem = function() {
// your logic here
}
请注意,我使用__proto__
了非标准的伪属性,但在 Chrome 和 Firefox 中公开。(不了解 Opera、Safari 等)。但是,正如您所见,它在开发过程中可能会有所帮助。