{"ScriptPreparationCode":"let pp = () =\u003E {\r\n let a = 1\r\n}\r\n//scope = (() =\u003E {\r\n\r\nfunction S() {\r\n this.get = {}\r\n};\r\n\r\nfunction E() {\r\n this.jj = () =\u003E {\r\n let a = 1\r\n }\r\n this.set = (v) =\u003E {\r\n this.get = v\r\n this.jj()\r\n }\r\n}\r\nS.prototype = new E()\r\nscope = new S()\r\n\r\nfunction SP() {\r\n this.get = {}\r\n this.jj = () =\u003E {\r\n let a = 1\r\n }\r\n this.set = (v) =\u003E {\r\n this.get = v\r\n this.jj()\r\n }\r\n};\r\n\r\n\r\nscopeA = new SP()\r\n\r\n\r\n\r\n// const set = (value) =\u003E {data0.test = value; pp()}\r\n// return data0\r\n//})();\r\n\r\ndata1 = {};\r\nhandler = {\r\n get: (target, prop) =\u003E (target[prop]),\r\n set: (target, prop, value) =\u003E {\r\n target[prop] = value;\r\n pp()\r\n },\r\n};\r\nproxy = new Proxy(data1, handler);\r\ndata2 = {\r\n get test() {\r\n return this._test;\r\n },\r\n set test(value) {\r\n this._test = value;\r\n pp()\r\n }\r\n};\r\nconst EVENTS = new WeakMap();\r\n\r\nfunction pub(object, event, data) {\r\n if (!EVENTS.has(object)) {\r\n return;\r\n }\r\n const callbacks = EVENTS.get(object)[event];\r\n if (callbacks) {\r\n for (const callback of callbacks) {\r\n callback(data);\r\n }\r\n }\r\n}\r\n\r\nfunction sub(object, event, callback) {\r\n let dict;\r\n if (!EVENTS.has(object)) {\r\n EVENTS.set(object, dict = {});\r\n } else {\r\n dict = EVENTS.get(object);\r\n }\r\n let evList;\r\n if (event in dict) {\r\n (evList = dict[event]).push(callback);\r\n } else {\r\n evList = dict[event] = [callback];\r\n }\r\n return function unsub() {\r\n evList.splice(evList.indexOf(callback), 1);\r\n }\r\n}\r\ndata3 = {};\r\nsub(data3, \u0027set-test\u0027, v =\u003E data3.test = v);\r\nsub(data3, \u0027get-test\u0027, () =\u003E pub(data3, \u0027getting-test\u0027, data3.test));\r\nsub(data3, \u0027getting-test\u0027, v =\u003E a \u002B= v);\r\nvar a = 0;\r\ndata4 = {};\r\ndata5 = {};\r\nsub(data5, \u0027set-test\u0027, v =\u003E {\r\n data5.test = v;\r\n pub(data5, \u0027getting-test\u0027, data3.test);\r\n});\r\nsub(data5, \u0027getting-test\u0027, v =\u003E a \u002B= v);","TestCases":[{"Name":"plain object","Code":"data4.test = Math.random();\r\na \u002B= data4.test;","IsDeferred":false},{"Name":"test scope","Code":"scope.set(Math.random())\r\na\u002B= scope.get","IsDeferred":false},{"Name":"scope 2","Code":"scopeA.set(Math.random())\r\na\u002B= scopeA.get","IsDeferred":false}]}