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

Как исправить, чтобы один класс вызывать два раза?
Пример вызова класса.
Вот пример кода.
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" то выведиться "a2", а если вместе запустить выдает ошибку.(18) [0, 0, 0, 400, 400, 400, 400, 0, 0, 0, 100, 100, 300, 300, 100, 300, 100, 100]
Cannot convert undefined or null to

Как исправить, чтобы один класс вызывать два раза?
Пример вызова класса.
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>