GeezerVisonThe World Wide Web, restored to 800 pixels of glory. |
| Home|About|Gaming cabinet|Archives|How it works|Starter sites |
GeezerVison is showing github.com — Symbol/JavaScript/7-hide-symbols-usage.js at master · HowProgrammingWorks/Symbol Expand file tree/ Copy path7-hide-symbols-usage.jsMore file actions 113 lines (84 loc) · 3.06 KB / Copy path7-hide-symbols-usage.jsFile metadata and controls113 lines (84 loc) · 3.06 KB 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 'use strict'; const hideSymbol = require('./6-hide-symbols.js'); let obj = { name: 'Marcus Aurelius', born: 121, [Symbol.for('secret')]: 'some secret information', [Symbol.for('notsecret')]: 'some not secret information', get getter() { return 'GETTER'; }, set setter(value) {}, }; console.log('\n\nBEFORE PROXYING:\n\n'); console.log('\x1b[4mfor in:\x1b[0m'); for (const i in obj) { console.log(i); } console.log('\x1b[4mconsole.log("obj"):\x1b[0m'); console.log(obj); console.log('\x1b[4mconsole.dir("obj"):\x1b[0m'); console.dir(obj, { showHidden: true, depth: null }); console.log('\x1b[4mObject.getOwnPropertyNames:\x1b[0m'); console.log(Object.getOwnPropertyNames(obj)); console.log('\x1b[4mObject.getOwnPropertySymbols:\x1b[0m'); console.log(Object.getOwnPropertySymbols(obj)); console.log( '\x1b[4mconsole.log(Object.getOwnPropertyDescriptor(obj, ' + 'Symbol.for("secret")))\x1b[0m', ); console.log(Object.getOwnPropertyDescriptor(obj, Symbol.for('secret'))); console.log('\x1b[4mconsole.log(Object.keys(obj)):\x1b[0m'); console.log(Object.keys(obj)); console.log('\x1b[4mconsole.log(obj[Symbol.for("secret")])\x1b[0m'); console.log(obj[Symbol.for('secret')]); console.log('\x1b[4mconsole.log(Object.entries(obj)):\x1b[0m'); console.log(Object.entries(obj)); Object.defineProperty(obj, '_debugOutputSecretField', { enumerable: false, get() { return this[Symbol.for('secret')]; }, configurable: true }); // proxying: obj = hideSymbol(obj, Symbol.for('secret')); console.log('\n\nAFTER PROXYING:\n\n'); console.log('\x1b[4mfor in:\x1b[0m'); for (const i in obj) { console.log(i); } console.log('\x1b[4mconsole.log("obj"):\x1b[0m'); console.log(obj); console.log('\x1b[4mconsole.dir("obj"):\x1b[0m'); console.dir(obj, { showHidden: true, depth: null, }); console.log('\x1b[4mObject.getOwnPropertyNames:\x1b[0m'); console.log(Object.getOwnPropertyNames(obj)); console.log('\x1b[4mObject.getOwnPropertySymbols:\x1b[0m'); console.log(Object.getOwnPropertySymbols(obj)); console.log( '\x1b[4mconsole.log(Object.getOwnPropertyDescriptor(obj, ' + 'Symbol.for("secret")))\x1b[0m', ); console.log(Object.getOwnPropertyDescriptor(obj, Symbol.for('secret'))); console.log('\x1b[4mconsole.log(Object.keys(obj)):\x1b[0m'); console.log(Object.keys(obj)); console.log('\x1b[4mconsole.log(obj[Symbol.for("secret")])\x1b[0m'); console.log(obj[Symbol.for('secret')]); console.log('\x1b[4mconsole.log(Object.entries(obj)):\x1b[0m'); console.log(Object.entries(obj)); // overwrite: console.log('\n\x1b[4m[Symbol.for("secret")] = "overwrite value"\x1b[0m'); obj[Symbol.for('secret')] = 'overwrite value'; console.log('\x1b[4mconsole.log("obj"):\x1b[0m'); console.log(obj); console.log('\x1b[4mObject.getOwnPropertySymbols:\x1b[0m'); console.log(Object.getOwnPropertySymbols(obj)); console.log('\x1b[4mconsole.log(obj[Symbol.for("secret")])\x1b[0m'); console.log(obj[Symbol.for('secret')]); console.log('\n\nREAL VALUE OF obj[Symbol.for("secret")]:\n\n'); console.log('\x1b[4mconsole.log(obj._debugOutputSecretField):\x1b[0m'); console.log(obj._debugOutputSecretField); |
| You are visitor 01402520 — GeezerVison does not store the pages you look up. Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required. |