class Container {
get(Module) {
//get(A) ->
const obj = new Module();
//new A() ->
const properties = Object.getOwnPropertyNames(obj);
//["b"] ->
for(let p of properties) {
if(!obj[p]) {
if(p === 'b') {
obj[p] = this.get(B);
} else if(p === 'c') {
obj[p] = this.get(C);
} else {}
}
}
}
}
// const container = new Container();
// const a = container.get(A);
// a.b.c.hello() === 'hello world'
class C {
hello() {
console.log('hello world');
}
}
class B {
// c:C
constructor(){
this.c = new C()
}
}
class A {
// b:B
constructor(){
this.b = new B()
}
}
let obj = new A();
let properties = Object.getOwnPropertyNames(obj);
console.log(properties)
for(let p of properties) {
console.log(p)
if(!obj[p]) {
}else{
console.log(obj[p])
obj[p].c.hello()
}
}
console