SOURCE



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 命令行工具 X clear

                    
>
console