2015-11-24 30 views
6

Ich versuche, die Punktnotation für den Zugriff auf localStorage zu überschreiben. ich es geschaffen, bereits die getItem und setItem Methoden außer Kraft zu setzen, wie hier beschrieben: Is it possible to override Local Storage and Session Storage separately in HTML5?überschreiben Punktnotation für localStorage

Jetzt habe ich versucht, einen Proxy erstellen auch den Punkt Zugang zu fangen, aber da ich scheine nicht in der Lage sein, das localstorage-Objekt zu überschreiben, wie versuchte hier

localStorage = new Proxy(localStorage, { 
get: function(target, name) { 
    if (!(name in target)) { 
     console.log("Getting non-existent property '" + name + "'"); 
     return undefined; 
    } 
    return '123'; 
}, 
set: function(target, name, value) { 
    if (!(name in target)) { 
     console.log("Setting non-existent property '" + name + "', initial value: " + value); 
    } 
    target[name] = value; 
} 
}); 

Nun, wenn ich es versuche ich immer noch Test statt 123:

localStorage.testKey = "test"; 
alert(localStorage.testKey) 
+0

Proxy-Objekt kann nicht den gleichen Namen wie das Objekt haben, das es virtualisiert. Tatsächlich wurden Ihre 'get' /' set' Methoden nicht aufgerufen. Versuchen Sie, 'console.log' Aufruf in jeder Methode hinzufügen (außerhalb' if') und Sie werden sehen. – hindmost

+0

Ich weiß, dass meine Methoden nicht aufgerufen werden, die Frage ist, ob es eine Möglichkeit gibt, sie zu nennen –

+0

_Wie gibt es eine Möglichkeit, sie aufgerufen zu bekommen._ Verwenden Sie anderen Namen/Bezeichner für Proxy-Objekt (alles außer 'localStorage'). – hindmost

Antwort

0

Wenn Sie das Getter auf local definieren sollte es funktionieren:

Object.defineProperty(window, "localStorage", new (function() { 
    this.get = function() { 
     console.log("I'm getting called"); 
    } 
})());