1 | "use strict";
|
2 |
|
3 | const emptyString = "";
|
4 |
|
5 | module.exports = Storage;
|
6 |
|
7 | function Storage() {
|
8 | const oStorage = {
|
9 | length: 0
|
10 | };
|
11 |
|
12 | Object.defineProperty(oStorage, "getItem", {
|
13 | value(key) {
|
14 | return this.hasOwnProperty(key) ? this[key] : null;
|
15 | }
|
16 | });
|
17 |
|
18 | Object.defineProperty(oStorage, "setItem", {
|
19 | value(key, value) {
|
20 | if (!key) return;
|
21 | this[key] = emptyString + value;
|
22 | }
|
23 | });
|
24 |
|
25 | Object.defineProperty(oStorage, "length", {
|
26 | get() {
|
27 | return Object.keys(this).length - 1;
|
28 | }
|
29 | });
|
30 |
|
31 | Object.defineProperty(oStorage, "removeItem", {
|
32 | value(key) {
|
33 | if (!key) return;
|
34 | delete this[key];
|
35 | }
|
36 | });
|
37 |
|
38 | Object.defineProperty(oStorage, "key", {
|
39 | value(index) {
|
40 | return Object.keys(oStorage).filter((p) => p !== "length")[index] || null;
|
41 | }
|
42 | });
|
43 |
|
44 | Object.defineProperty(oStorage, "clear", {
|
45 | value() {
|
46 | for (const key in this) {
|
47 | if (this.hasOwnProperty(key)) delete this[key];
|
48 | }
|
49 | this.length = 0;
|
50 | }
|
51 | });
|
52 |
|
53 | this.value = oStorage;
|
54 | this.writable = true;
|
55 | this.configurable = true;
|
56 | this.enumerable = true;
|
57 |
|
58 | return oStorage;
|
59 | }
|