2015-11-24 2 views
6

Я пытаюсь переопределить точечную нотацию для доступа к localStorage. я уже успел перекрыть GetItem и методы SetItem, как описано здесь: Is it possible to override Local Storage and Session Storage separately in HTML5?Переопределить точечную нотацию для localStorage

Теперь я попытался создать прокси-сервер также поймать доступ точки, но так как я, кажется, не в состоянии переписать объект LocalStorage, как пытался здесь

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; 
} 
}); 

Теперь, когда я пытаюсь это я все еще получаю тест вместо 123:

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

Прокси-объект не может иметь то же имя, что и объект, который он виртуализирует. На самом деле ваши методы 'get' /' set' не вызывались. Попробуйте добавить вызов console.log в каждом методе (вне 'if'), и вы увидите. – hindmost

+0

Я знаю, что мои методы не вызываются, вопрос в том, есть ли способ получить их по имени –

+0

_whe есть какой-либо способ их вызова. Используйте другое имя/идентификатор для прокси-объекта (все, кроме 'localStorage'). – hindmost

ответ

0

Если определить сорбент на LocalStorage он должен работать:

Object.defineProperty(window, "localStorage", new (function() { 
    this.get = function() { 
     console.log("I'm getting called"); 
    } 
})()); 
Смежные вопросы