multiple layers - shysolocup/aepl GitHub Wiki

const Class = require('aepl');


// main class
new Class("Main", class {
	constructor() {
		this.data = [1, 2, 3];
		this.layers = [];
	}
});



// subclasses
Main.new("subclass", "Layer", class {
	constructor() {
		this.extras = [];
		this.data = [4, 5, 6];
		this.parent.layers.push(this);
	}
});


Layer.new("subclass", "Extra", class {
	constructor() {
		this.data = [7, 8, 9]
		this.parent.extras.push(this);
	}
});



// functions
Main.new("func", "reverse", function() {
    return this.data.reverse();
});


Layer.new("func", "reverse", function() {
    return this.data.reverse();
});


Extra.new("func", "reverse", function() {
    return this.data.reverse();
});



// properties
Layer.new("prop", "main", function() {
	return this.parent;
});


Extra.new("prop", "layer", function() {
	return this.parent;
});


Extra.new("prop", "main", function() {
	return this.parent.parent;
});



// examples
let main = new Main();


console.log(main); // Main { layers: [], data: [1, 2, 3] }


let layer = new main.Layer();


console.log(layer); // Layer { extras: [], data: [4, 5, 6] }
console.log(layer.main); // Main { layers: [ [Layer] ], data: [1, 2, 3] }


let extra = new layer.Extra();


console.log(extra); // Extra { data: [7, 8, 9] }
console.log(extra.layer); // Layer { extras: [ [Extra] ], data: [4, 5, 6] }
console.log(extra.main); // Main { layers: [ [Layer] ], data: [1, 2, 3] }


console.log(main.reverse()); // [3, 2, 1]
console.log(layer.reverse()); // [6, 5, 4]
console.log(extra.reverse()); // [9, 8, 7]