Estoy tratando de anular el método localStorage.setItem para agregar una opción de deshabilitar el almacenamiento local con fines de depuración. Pero sigo teniendo un error de Invocación ilegal cuando uso el método.
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");He hecho un jsfiddle para que lo pruebes, ya que en el fragmento de código, el almacenamiento local no funcionará.
He probado con y sin ventana, no funciona en ninguno de los dos casos.
No podemos verlo correctamente en jsfiddle, pero el error está en la línea: función originalFunction(keyName, keyValue)
He hecho el override correspondiente a esta pregunta . Pero no parece funcionar.
He encontrado el problema.
Aparentemente, necesitamos usar .apply para llamar al método original.
He actualizado el violín, por lo que ahora es la versión de trabajo. Aquí hay algunos fragmentos para la coherencia:
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");El fragmento no funcionará, pero el código sí.
He encontrado la sintaxis aquí .