Created
February 16, 2017 18:38
-
-
Save Purexo/66342115679d6e8c8825162e6a662832 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const handlerStorage = { | |
get(target, key) { | |
const value = target.getItem(key); | |
try { | |
return JSON.parse(value); | |
} catch (e) { | |
return value; | |
} | |
}, | |
set(target, key, value) { | |
try { | |
target.setItem(key, JSON.stringify(value)); | |
} catch (e) { | |
target.setItem(key, new String(value)); | |
} | |
return true; | |
}, | |
ownKeys(target) { | |
return Array.from(target, (value, index) => target.key(index)) | |
}, | |
has(target, key) { | |
return target.getItem(key) != null | |
}, | |
delete(target, key) { | |
target.removeItem(key); | |
return true; | |
} | |
}; | |
const store = { | |
local: new Proxy(localStorage, handlerStorage), | |
session: new Proxy(sessionStorage, handlerStorage) | |
}; | |
// set trap | |
store.local.test = {foo: 'bar'}; | |
// get trap | |
console.log(store.local.test); // {foo: 'bar'} | |
// ownKeys trap | |
console.log(Object.keys(store.local)); // ['test'] | |
// has trap | |
console.log('test' in store.local); // true | |
console.log('clé inexistante' in store.local); // false | |
// delete trap | |
delete store.local.test; | |
// has trap | |
console.log('test' in store.local); // false |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment