JSFiddle - React, Tailwind, and code Playground

JavaScript

function Tree() {
    var branch1;//private object
    var branch2;
    
    Object.defineProperty(this, 'branch1', 
         {
          enumerable:true,
          get:function(){
              if ( !branch1 ) {
                  branch1 = new Tree();
              }
              return branch1;
          },
          set:function(val) {
              branch1 = val;
          }
         }
    )
    
    Object.defineProperty(this, 'branch2', 
        {
          enumerable:true,
          get:function(){
              if ( !branch2 ) {
                  branch2 = new Tree();
              }
              return branch2;
          },
          set:function(val) {
              branch2 = val;
          }
        }
    )
    
}

var tree = new Tree();
//tree.branch1 = 'hi'
tree.branch1.branch2.twig = 'yellow'
console.log( tree.branch1.branch2.twig )


tree.branch1.branch2.branch1.branch1.twig = 'green'
console.log( tree.branch1.branch2.branch1.branch1.twig )

tree.branch1.branch1.someAttribute = 'branchONE'
console.log(tree.branch1.branch1.someAttribute)