|
1 | 1 | 'use strict'
|
2 | 2 |
|
| 3 | +const hasHandler = { has } |
| 4 | +const allHandlers = { has, get } |
3 | 5 | const globals = new Set()
|
4 |
| -const proxies = new WeakMap() |
5 |
| -const tempVarStore = new WeakMap() |
6 |
| -const handlers = {has, get} |
| 6 | +let temp |
7 | 7 |
|
8 | 8 | let globalObj
|
9 | 9 | if (typeof window !== 'undefined') globalObj = window // eslint-disable-line
|
@@ -38,27 +38,21 @@ function hideAll () {
|
38 | 38 | }
|
39 | 39 |
|
40 | 40 | function has (target, key) {
|
41 |
| - return globals.has(key) ? Reflect.has(target, key) : true |
| 41 | + return globals.has(key) ? (key in target) : true |
42 | 42 | }
|
43 | 43 |
|
44 |
| -function get (target, key, receiver) { |
45 |
| - const tempVars = tempVarStore.get(target) |
46 |
| - if (tempVars && (key in tempVars)) { |
47 |
| - return tempVars[key] |
48 |
| - } |
49 |
| - return Reflect.get(target, key, receiver) |
| 44 | +function get (target, key) { |
| 45 | + return key in temp ? temp[key] : target[key] |
50 | 46 | }
|
51 | 47 |
|
52 | 48 | function toSandbox (obj, tempVars) {
|
53 |
| - tempVarStore.set(obj, tempVars) |
54 |
| - let sandbox = proxies.get(obj) |
55 |
| - if (!sandbox) { |
56 |
| - sandbox = new Proxy(obj, handlers) |
57 |
| - proxies.set(obj, sandbox) |
| 49 | + if (tempVars) { |
| 50 | + temp = tempVars |
| 51 | + return new Proxy(obj, allHandlers) |
58 | 52 | }
|
59 |
| - return sandbox |
| 53 | + return new Proxy(obj, hasHandler) |
60 | 54 | }
|
61 | 55 |
|
62 |
| -function clearSandbox (obj) { |
63 |
| - tempVarStore.delete(obj) |
| 56 | +function clearSandbox () { |
| 57 | + temp = undefined |
64 | 58 | }
|
0 commit comments