本地存储setItem override -非法调用错误



我试图覆盖localStorage.setItem方法以添加禁用本地存储选项以进行调试。但是我一直有一个非法调用错误时使用的方法。

let originalFunction = window.Storage.prototype.setItem;
window.Storage.prototype.setItem = (keyName, keyValue) => {
console.log("Override worked ! ")
let currentState = localStorage.getItem("disableStorage");
if (currentState === null || keyName === "disableStorage") {
originalFunction(keyName, keyValue);
}
return;
}
localStorage.setItem("test", "blah");

我已经为您做了一个jsfiddle来测试它,正如在代码片段中一样,本地存储不能工作。

我试过有和没有窗口,这两种情况都不起作用。

我们不能在jsfiddle中正确地看到它,但错误在行:originalFunction(keyName, keyValue)

我已经完成了这个问题对应的重写。但它似乎不起作用。

我找到问题了。
显然,我们需要使用.apply来调用原来的方法。

我已经更新了小提琴,所以它现在是工作版本。这里有一些关于连贯性的片段:

let originalFunction = window.Storage.prototype.setItem;
window.Storage.prototype.setItem = function(keyName, keyValue) {
console.log("Override worked ! ")
let currentState = localStorage.getItem("disableStorage");
if (currentState === null || keyName === "disableStorage") {
originalFunction.apply(this, arguments);
}
return;
}
localStorage.setItem("test", "blah");

这个片段不能工作,但是代码可以。

我在这里找到了语法。

最新更新