Почему появляется ошибка когда я повторно пытаюсь вызвать класс?

Katerina1993

Новичок
Здравствуйте, я написала класс, но почему-то вызвать его могу только один раз. Суть примера передать значения координат записать их в массив а потом использовать эти значения для вычерчивания фигур. Этот класс который создаст массив я буду использовать в других функциях из одной библиотеки.

Вот пример кода.
HTML:
<!DOCTYPE html>
<html lang="en" >

<head>
  <meta charset="UTF-8">
</head>
<body>



      <script>


class Container {
constructor(obj,chain,bool) {
   
   
   
      this._chain = chain;
   
      this.ArrayProto = Array.prototype;
      this.push = this.ArrayProto.push;
      this.nativeForEach = this.ArrayProto.push;
      this.nativeMap = this.ArrayProto.map;
   
 
   
 
      if (typeof obj === "undefined") {
     
     
        this._chain = false;
   
      }
      else
      {
     
        this._wrapped = obj;
   
   
        //
        this.result = function(obj) {
     
         return this._chain ? new Container(obj,true).chain() : obj;
        };
      }
      if(bool)
      {
        this.mixin(this);
      }
   }

  map(obj, iterator, context) {
//


    var results = [];
 
    if (obj == null) return results;
    if (this.nativeMap && obj.map === this.nativeMap)
    {
   
      return obj.map(iterator, context);
      //obj.map(iterator, context);
    }

    return results;
  };

   flatten1(array, shallow) {
 
     var aar = this.flatten2(array, shallow, []);
 
     return aar;
   };

   flatten2(input, shallow, output) {
 
     var _self = this;

     Object.keys(input).forEach(function(value) {
       
          if (input[value] instanceof Array) {
            // console.log(input[value]);
             _self.flatten2(input[value], shallow, output);
         
         
            } else {
             output.push(input[value]);
           }
 
     });
 
     return output;
    };
 
 
 

 
   functions(obj) {
      var names = [];
      names.push("map");
      names.push("flatten1");
      return names.sort();
    }
   mixin(obj11) {
   
      var _self = this;
   
       this.functions(obj11).forEach((name) => {
          var func = obj11[name];
       
       
           Container.prototype[name] = function() {
             
                var args = [this._wrapped];
             
           
             
                _self.push.apply(args, arguments);
           
                return _self.result.call(this, func.apply(new Container, args));
          };
       
       });

      }
   
 
   
   
    chain (obj){
         if (typeof obj === "undefined") {
         
             this._chain = true;
             return this;
         } else {
         
             return new Container(obj,true).chain();
        }
   }

 
    value() {
 
      return this._wrapped;
    }
  }
  var points = [{x:0,y:0},
   {x:0,y:400},
   {x:400,y:400},
   {x:400,y:0},
   {x:0,y:0},
   {x:100,y:100},
   {x:300,y:300},
   {x:100,y:300},
   {x:100,y:100}
];
   var a1 = new Container(points,true,true).chain().map(function(p) {
     
   
         return [p.x, p.y];
     
    }).flatten1().value();
 
    console.log(a1);
 
  var points = [{x:100,y:100},{x: 100, y: 300},{x: 300, y: 300}];
 
    var a2 = new Container(points,true,true).chain().map(function(p) {
     
   
         return [p.x, p.y];
     
    }).flatten1().value();
 
    console.log(a2);
</script>


</body>

</html>
Создается два экземпляра но почему-то выводиться, только a1.
Значение:
(18) [0, 0, 0, 400, 400, 400, 400, 0, 0, 0, 100, 100, 300, 300, 100, 300, 100, 100]
Если убрать "a1" то выведиться "a2", а если вместе запустить выдает ошибку.
Cannot convert undefined or null to
1638
Как исправить, чтобы один класс вызывать два раза?
Пример вызова класса.
HTML:
var points = [{x:0,y:0},
   {x:0,y:400},
   {x:400,y:400},
   {x:400,y:0},
   {x:0,y:0},
   {x:100,y:100},
   {x:300,y:300},
   {x:100,y:300},
   {x:100,y:100}
];
   var a1 = new Container(points,true,true).chain().map(function(p) {
     
    
         return [p.x, p.y];
     
    }).flatten1().value();
 
    console.log(a1);
 
  var points = [{x:100,y:100},{x: 100, y: 300},{x: 300, y: 300}];
 
    var a2 = new Container(points,true,true).chain().map(function(p) {
     
    
         return [p.x, p.y];
     
    }).flatten1().value(); //ОШИБКА
 
    console.log(a2);
</script>
 
Сверху