{"ScriptPreparationCode":"class PointClass {\r\n\tconstructor(x, y){\r\n\t\tthis.x = x;\r\n\t\tthis.y = y;\r\n }\r\n\r\n\tadd(point){\r\n\t\treturn new PointClass(this.x \u002B point.x, this.y \u002B point.y);\r\n }\r\n\r\n\tsub(point){\r\n\t\treturn new PointClass(this.x - point.x, this.y - point.y);\r\n }\r\n}\r\n\r\nfunction PointProto(x, y){\r\n\tthis.x = x;\r\n\tthis.y = y;\r\n}\r\n\r\nPointProto.prototype.add = function(point){\r\n return new PointProto(this.x \u002B point.x, this.y \u002B point.y);\r\n}\r\n\r\nPointProto.prototype.sub = function(point){\r\n\treturn new PointProto(this.x - point.x, this.y - point.y);\r\n}\r\n\r\nfunction PointFactory(x, y){\r\n\treturn {\r\n \tx, \r\n \ty, \r\n \tadd: (point)=\u003EPointFactory(this.x \u002B point.x, this.y \u002B point.y),\r\n\t \tsub: (point)=\u003EPointFactory(this.x - point.x, this.y - point.y)\r\n } \r\n}\r\n\r\n\r\nwindow.PointClass = PointClass\r\nwindow.PointProto = PointProto\r\nwindow.PointFactory = PointFactory\r\nwindow.num = 10_000","TestCases":[{"Name":"ES6 Class","Code":"const points = []\r\n\r\nfor (let index = 0; index \u003C num; index\u002B\u002B) {\r\n points.push(new PointClass(10, 10))\r\n}","IsDeferred":false},{"Name":"Function Prototype","Code":"const points = []\r\n\r\nfor (let index = 0; index \u003C num; index\u002B\u002B) {\r\n points.push(new PointProto(10, 10))\r\n}","IsDeferred":false},{"Name":"Object Literal","Code":"const points = []\r\n\r\nfor (let index = 0; index \u003C num; index\u002B\u002B) {\r\n points.push(PointFactory(10, 10))\r\n}","IsDeferred":false}]}