{"ScriptPreparationCode":"let scopeProp = 1;\r\n\r\nvar literal = {\r\n prop: 1,\r\n // getters and setters\r\n get getterThisProp() {\r\n return this.prop;\r\n },\r\n set setterThisProp(value) {\r\n this.prop = value;\r\n },\r\n get getterScopeProp() {\r\n return scopeProp;\r\n },\r\n set setterScopeProp(value) {\r\n scopeProp = value;\r\n },\r\n // methods\r\n getThisPropMeth() {\r\n return this.prop;\r\n },\r\n setThisPropMeth(value) {\r\n this.prop = value;\r\n },\r\n getScopePropMeth() {\r\n return scopeProp;\r\n },\r\n setScopePropMeth(value) {\r\n scopeProp = value;\r\n },\r\n // functions have refs to this\r\n getThisPropFunc: function() {\r\n return this.prop;\r\n },\r\n setThisPropFunc: function(value) {\r\n this.prop = value;\r\n },\r\n getScopePropFunc: function() {\r\n return scopeProp;\r\n },\r\n setScopePropFunc: function(value) {\r\n scopeProp = value;\r\n },\r\n // arrow functions no refs to this\r\n getScopePropArrow: () =\u003E scopeProp,\r\n setScopePropArrow: value =\u003E scopeProp = value,\r\n};\r\n\r\nfunction Constructed() {\r\n this.prop = 1;\r\n let instProp = 1;\r\n this.getInstPropFunc = function() {\r\n return instProp;\r\n };\r\n this.setInstPropFunc = function(value) {\r\n instProp = value;\r\n };\r\n this.getInstPropArrow = () =\u003E instProp;\r\n this.setInstPropArrow = value =\u003E instProp = value;\r\n};\r\nConstructed.prototype = {\r\n // getters and setters\r\n get getterThisProp() {\r\n return this.prop;\r\n },\r\n set setterThisProp(value) {\r\n this.prop = value;\r\n },\r\n get getterScopeProp() {\r\n return scopeProp;\r\n },\r\n set setterScopeProp(value) {\r\n scopeProp = value;\r\n },\r\n // methods\r\n getThisPropMeth() {\r\n return this.prop;\r\n },\r\n setThisPropMeth(value) {\r\n this.prop = value;\r\n },\r\n getScopePropMeth() {\r\n return scopeProp;\r\n },\r\n setScopePropMeth(value) {\r\n scopeProp = value;\r\n },\r\n // prototype functions have refs to this\r\n getThisPropFunc: function() {\r\n return this.prop;\r\n },\r\n setThisPropFunc: function(value) {\r\n \tthis.prop = value;\r\n },\r\n getScopePropFunc: function() {\r\n return scopeProp;\r\n },\r\n setScopePropFunc: function(value) {\r\n scopeProp = value;\r\n },\r\n // prototype arrow functions no refs to this\r\n getScopePropArrow: () =\u003E scopeProp,\r\n setScopePropArrow: value =\u003E scopeProp = value,\r\n};\r\nvar constructed = new Constructed();\r\n\r\nclass Classed {\r\n prop = 1;\r\n #privProp = 1;\r\n // getters and setters\r\n get getterThisProp() {\r\n return this.prop;\r\n };\r\n set setterThisProp(value) {\r\n this.prop = value;\r\n };\r\n get getterThisPrivProp() {\r\n return this.#privProp;\r\n };\r\n set setterThisPrivProp(value) {\r\n this.#privProp = value;\r\n };\r\n get getterScopeProp() {\r\n return scopeProp;\r\n };\r\n set setterScopeProp(value) {\r\n scopeProp = value;\r\n };\r\n // methods\r\n getThisPropMeth() {\r\n return this.prop;\r\n };\r\n setThisPropMeth(value) {\r\n this.prop = value;\r\n };\r\n getThisPrivPropMeth() {\r\n return this.#privProp;\r\n };\r\n setThisPrivPropMeth(value) {\r\n this.#privProp = value;\r\n };\r\n getScopePropMeth() {\r\n return scopeProp;\r\n };\r\n setScopePropMeth(value) {\r\n scopeProp = value;\r\n };\r\n constructor() {\r\n let instProp = 1;\r\n this.getInstPropFunc = function() {\r\n return instProp;\r\n };\r\n this.setInstPropFunc = function(value) {\r\n instProp = value;\r\n };\r\n this.getInstPropArrow = () =\u003E instProp;\r\n this.setInstPropArrow = value =\u003E instProp = value;\r\n };\r\n};\r\n// prototype functions have refs to this.prop but not to this.#privProp\r\nClassed.prototype.getThisPropFunc = function() {\r\n return this.prop;\r\n};\r\nClassed.prototype.setThisPropFunc = function(value) {\r\n this.prop = value;\r\n};\r\nClassed.prototype.getScopePropFunc = function() {\r\n return scopeProp;\r\n};\r\nClassed.prototype.setScopePropFunc = function(value) {\r\n scopeProp = value;\r\n};\r\n// prototype arrow functions no refs to this\r\nClassed.prototype.getScopePropArrow = () =\u003E scopeProp;\r\nClassed.prototype.setScopePropArrow = value =\u003E scopeProp = value;\r\nvar classed = new Classed();","TestCases":[{"Name":"Get literal property","Code":"const value = literal.prop;","IsDeferred":false},{"Name":"Method class get scope prop","Code":"const value = classed.getScopePropMeth();","IsDeferred":false},{"Name":"Method class set scope prop","Code":"classed.setScopePropMeth(1);","IsDeferred":false},{"Name":"Function literal get prop","Code":"const value = literal.getThisPropFunc();","IsDeferred":false},{"Name":"Function literal set prop","Code":"literal.setThisPropFunc(1);","IsDeferred":false},{"Name":"Function constructor get prop","Code":"const value = constructed.getThisPropFunc();","IsDeferred":false},{"Name":"Function constructor set prop","Code":"constructed.setThisPropFunc(1);","IsDeferred":false},{"Name":"Function class get prop","Code":"const value = classed.getThisPropFunc();","IsDeferred":false},{"Name":"Function class set prop","Code":"classed.setThisPropFunc(1);","IsDeferred":false},{"Name":"Function literal get scope prop","Code":"const value = literal.getScopePropFunc();","IsDeferred":false},{"Name":"Function literal set scope prop","Code":"literal.setScopePropFunc(1);","IsDeferred":false},{"Name":"Function constructor get scope prop","Code":"const value = constructed.getScopePropFunc();","IsDeferred":false},{"Name":"Function constructor set scope prop","Code":"constructed.setScopePropFunc(1);","IsDeferred":false},{"Name":"Method constructor set scope prop","Code":"constructed.setScopePropMeth(1);","IsDeferred":false},{"Name":"Function class get scope prop","Code":"const value = classed.getScopePropFunc();","IsDeferred":false},{"Name":"Arrow-function literal get scope prop","Code":"const value = literal.getScopePropArrow();","IsDeferred":false},{"Name":"Arrow-function literal set scope prop","Code":"literal.setScopePropArrow(1);","IsDeferred":false},{"Name":"Arrow-function constructor get scope prop","Code":"const value = constructed.getScopePropArrow();","IsDeferred":false},{"Name":"Arrow-function constructor set scope prop","Code":"constructed.setScopePropArrow(1);","IsDeferred":false},{"Name":"Arrow-function class get scope prop","Code":"const value = classed.getScopePropArrow();","IsDeferred":false},{"Name":"Arrow-function class set scope prop","Code":"classed.setScopePropArrow(1);","IsDeferred":false},{"Name":"Function constructor get instance prop","Code":"const value = constructed.getInstPropFunc();","IsDeferred":false},{"Name":"Function constructor set instance prop","Code":"constructed.setInstPropFunc(1);","IsDeferred":false},{"Name":"Function class get instance prop","Code":"const value = classed.getInstPropFunc();","IsDeferred":false},{"Name":"Function class set instance prop","Code":"classed.setInstPropFunc(1);","IsDeferred":false},{"Name":"Arrow-function constructor get instance prop","Code":"const value = constructed.getInstPropArrow();","IsDeferred":false},{"Name":"Arrow-function constructor set instance prop","Code":"constructed.setInstPropArrow(1);","IsDeferred":false},{"Name":"Function class set scope prop","Code":"classed.setScopePropFunc(1);","IsDeferred":false},{"Name":"Method constructor get scope prop","Code":"const value = constructed.getScopePropMeth();","IsDeferred":false},{"Name":"Method literal set scope prop","Code":"literal.setScopePropMeth(1);","IsDeferred":false},{"Name":"Method literal get scope prop","Code":"const value = literal.getScopePropMeth();","IsDeferred":false},{"Name":"Set literal prop","Code":"literal.prop = 1;","IsDeferred":false},{"Name":"Get constructor prop","Code":"const value = constructed.prop;","IsDeferred":false},{"Name":"Set constructor prop","Code":"constructed.prop = 1;","IsDeferred":false},{"Name":"Get class prop","Code":"const value = classed.prop;","IsDeferred":false},{"Name":"Set class prop","Code":"classed.prop = 1;","IsDeferred":false},{"Name":"Getter literal prop","Code":"const value = literal.getterThisProp;","IsDeferred":false},{"Name":"Setter literal prop","Code":"literal.setterThisProp = 1;","IsDeferred":false},{"Name":"Getter constructor prop","Code":"const value = constructed.getterThisProp;","IsDeferred":false},{"Name":"Setter constructor prop","Code":"constructed.setterThisProp = 1;","IsDeferred":false},{"Name":"Getter class prop","Code":"const value = classed.getterThisProp;","IsDeferred":false},{"Name":"Setter class prop","Code":"classed.setterThisProp = 1;","IsDeferred":false},{"Name":"Getter class private prop","Code":"const value = classed.getterThisPrivProp;","IsDeferred":false},{"Name":"Setter class private prop","Code":"classed.SetterThisPrivProp = 1;","IsDeferred":false},{"Name":"Getter literal scope prop","Code":"const value = literal.getterScopeProp;","IsDeferred":false},{"Name":"Setter literal scope prop","Code":"literal.setterScopeProp = 1;","IsDeferred":false},{"Name":"Getter constructor scope prop","Code":"const value = constructed.getterScopeProp;","IsDeferred":false},{"Name":"Setter constructor scope prop","Code":"constructed.setterScopeProp = 1;","IsDeferred":false},{"Name":"Getter scope class prop","Code":"const value = classed.getterScopeProp;","IsDeferred":false},{"Name":"Setter scope class prop","Code":"classed.setterScopeProp = 1;","IsDeferred":false},{"Name":"Method literal get prop","Code":"const value = literal.getThisPropMeth();","IsDeferred":false},{"Name":"Method literal set prop","Code":"literal.setThisPropMeth(1);","IsDeferred":false},{"Name":"Method constructor get prop","Code":"const value = constructed.getThisPropMeth();","IsDeferred":false},{"Name":"Method constructor set prop","Code":"constructed.setThisPropMeth(1);","IsDeferred":false},{"Name":"Method class get prop","Code":"const value = classed.getThisPropMeth();","IsDeferred":false},{"Name":"Method class set prop","Code":"classed.setThisPropMeth(1);","IsDeferred":false},{"Name":"Method class get private prop","Code":"const value = classed.getThisPrivPropMeth();","IsDeferred":false},{"Name":"Method class set private prop","Code":"classed.setThisPrivPropMeth(1);","IsDeferred":false},{"Name":"Arrow-function class get instance prop","Code":"const value = classed.getInstPropArrow();","IsDeferred":false},{"Name":"Arrow-function class set instance prop","Code":"classed.setInstPropArrow(1);","IsDeferred":false}]}