{"ScriptPreparationCode":"var objs = [];\r\nvar proxProp = [];\r\nvar proxDyn = [];\r\nvar proxEval = [];\r\nvar proxFunc = [];\r\nvar count = 1000;\r\nvar a, b, c;\r\n\r\nclass ProxProp {\r\n constructor(data) { this.data = data }\r\n get a() { return this.data.a; }\r\n get b() { return this.data.b; }\r\n get c() { return this.data.c; }\r\n set a(v) { this.data.a = v; }\r\n set b(v) { this.data.b = v; }\r\n set c(v) { this.data.c = v; }\r\n}\r\n\r\nconst ProxEval = eval(\u0060class ProxEval {\r\n constructor(data) { this.data = data }\r\n get a() { return this.data.a; }\r\n get b() { return this.data.b; }\r\n get c() { return this.data.c; }\r\n set a(v) { this.data.a = v; }\r\n set b(v) { this.data.b = v; }\r\n set c(v) { this.data.c = v; }\r\n};\r\nProxEval;\r\n\u0060);\r\n\r\nconst ProxFunc = new Function(\u0060return class ProxFunc {\r\n constructor(data) { this.data = data }\r\n get a() { return this.data.a; }\r\n get b() { return this.data.b; }\r\n get c() { return this.data.c; }\r\n set a(v) { this.data.a = v; }\r\n set b(v) { this.data.b = v; }\r\n set c(v) { this.data.c = v; }\r\n};\r\n\u0060);\r\n\r\nclass ProxDyn {\r\n constructor(data) { this.data = data }\r\n}\r\n\r\n[\u0022a\u0022, \u0022b\u0022, \u0022c\u0022].forEach(n=\u003E Object.defineProperty(ProxDyn.prototype, n, {\r\n get() { return this.data[n]; },\r\n set(v) { this.data[n] = v; },\r\n}));\r\n\r\nfor (let i = 0; i \u003C count; i\u002B\u002B) {\r\n const obj = { a: Math.random(), b: new Date, c: Date.now().toString() };\r\n objs.push(obj);\r\n proxProp.push(new ProxProp(obj));\r\n proxDyn.push(new ProxDyn(obj));\r\n proxEval.push(new ProxEval(obj));\r\n proxFunc.push(new ProxFunc(obj));\r\n}\r\n","TestCases":[{"Name":"Get generated property with eval","Code":"for (let i = 0; i \u003C proxEval.length; i\u002B\u002B) {\r\n const obj = proxEval[i];\r\n a = obj.a;\r\n b = obj.b;\r\n c = obj.c;\r\n}","IsDeferred":false},{"Name":"Get property","Code":"for (let i = 0; i \u003C proxProp.length; i\u002B\u002B) {\r\n const obj = proxProp[i];\r\n a = obj.a;\r\n b = obj.b;\r\n c = obj.c;\r\n}","IsDeferred":false},{"Name":"Get dynamic property","Code":"for (let i = 0; i \u003C proxDyn.length; i\u002B\u002B) {\r\n const obj = proxDyn[i];\r\n a = obj.a;\r\n b = obj.b;\r\n c = obj.c;\r\n}","IsDeferred":false},{"Name":"Get field","Code":"for (let i = 0; i \u003C objs.length; i\u002B\u002B) {\r\n const obj = objs[i];\r\n a = obj.a;\r\n b = obj.b;\r\n c = obj.c;\r\n}","IsDeferred":false},{"Name":"Nothing","Code":"for (let i = 0; i \u003C objs.length; i\u002B\u002B) {\r\n const obj = objs[i];\r\n}","IsDeferred":false},{"Name":"Get generated property with Function ctor","Code":"for (let i = 0; i \u003C proxFunc.length; i\u002B\u002B) {\r\n const obj = proxFunc[i];\r\n a = obj.a;\r\n b = obj.b;\r\n c = obj.c;\r\n}","IsDeferred":false}]}